[Libreoffice-commits] core.git: filter/source readlicense_oo/license

Marco Cecchetti marco.cecchetti at collabora.com
Fri Jul 1 11:56:04 UTC 2016


 filter/source/svg/presentation_engine.js |  992 ++++++++++++++++++++++++++++++-
 readlicense_oo/license/LICENSE           |   38 +
 readlicense_oo/license/LICENSE.fodt      |   32 +
 readlicense_oo/license/LICENSE.html      |  278 +++-----
 4 files changed, 1156 insertions(+), 184 deletions(-)

New commits:
commit d3f5800a9655ac61a5ef8d0b1b2bc0f436b32cfe
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
Date:   Tue Jun 28 18:17:53 2016 +0200

    svg-export - Removal of the SVG 1.1 path API in Chrome
    
    On Chrome browser most of shape effects and slide transitions did not
    work anymore: that was due to the fact that several animations exploit
    the DOM api for handling path segments of the svg:path element.
    Starting from version 48 such an api has been removed from Chrome:
    https://bugs.chromium.org/p/chromium/issues/detail?id=539385 ;
    Moreover Chrome does not yet provide an implementation for the new
    svgpath api introduced in SVG 2.0 draft: so there is no native support
    for handling path data directly.
    
    The present patch adapts the JavaScript implementation of the old SVG
    1.1 path api proposed here: https://github.com/progers/pathseg .
    
    Change-Id: I536202291e0b8895f91d9e499a32fa57c110b2c1
    Reviewed-on: https://gerrit.libreoffice.org/26839
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>

diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 7dd7d14..9de750a 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -674,6 +674,984 @@ function configureDetectionTools()
  *  @source http://svn.dojotoolkit.org/src/dojox/trunk/_base/sniff.js
  */
 
+/*****
+ * @licstart
+ *
+ * The following is the license notice for the part of JavaScript code of this
+ * file included between the '@svgpathstart' and the '@svgpathend' notes.
+ */
+
+/*****  **********************************************************************
+ *
+ *   Copyright 2015 The Chromium Authors. All rights reserved.
+ *
+ *   The Chromium Authors can be found at
+ *   http://src.chromium.org/svn/trunk/src/AUTHORS
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions are
+ *   met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following disclaimer
+ *   in the documentation and/or other materials provided with the
+ *   distribution.
+ *   * Neither the name of Google Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/*****
+ * @licend
+ *
+ * The above is the license notice for the part of JavaScript code of this
+ * file included between the '@svgpathstart' and the '@svgpathend' notes.
+ */
+
+
+/*****
+ * @svgpathstart
+ *
+ *  The following code is a derivative work of some part of the SVGPathSeg API.
+ *
+ *  This API is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from
+ *  SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec
+ *  changes which were implemented in Firefox 43 and Chrome 46.
+ *
+ *  @source https://github.com/progers/pathseg
+ */
+
+(function() { 'use strict';
+    if (!('SVGPathSeg' in window)) {
+        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg
+        window.SVGPathSeg = function(type, typeAsLetter, owningPathSegList) {
+            this.pathSegType = type;
+            this.pathSegTypeAsLetter = typeAsLetter;
+            this._owningPathSegList = owningPathSegList;
+        };
+
+        SVGPathSeg.prototype.classname = 'SVGPathSeg';
+
+        SVGPathSeg.PATHSEG_UNKNOWN = 0;
+        SVGPathSeg.PATHSEG_CLOSEPATH = 1;
+        SVGPathSeg.PATHSEG_MOVETO_ABS = 2;
+        SVGPathSeg.PATHSEG_MOVETO_REL = 3;
+        SVGPathSeg.PATHSEG_LINETO_ABS = 4;
+        SVGPathSeg.PATHSEG_LINETO_REL = 5;
+        SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;
+        SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;
+        SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;
+        SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;
+        SVGPathSeg.PATHSEG_ARC_ABS = 10;
+        SVGPathSeg.PATHSEG_ARC_REL = 11;
+        SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;
+        SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;
+        SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;
+        SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;
+        SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
+        SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
+        SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
+        SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
+
+        // Notify owning PathSegList on any changes so they can be synchronized back to the path element.
+        SVGPathSeg.prototype._segmentChanged = function() {
+            if (this._owningPathSegList)
+                this._owningPathSegList.segmentChanged(this);
+        };
+
+        window.SVGPathSegClosePath = function(owningPathSegList) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);
+        };
+        SVGPathSegClosePath.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegClosePath.prototype.toString = function() { return '[object SVGPathSegClosePath]'; };
+        SVGPathSegClosePath.prototype._asPathString = function() { return this.pathSegTypeAsLetter; };
+        SVGPathSegClosePath.prototype.clone = function() { return new SVGPathSegClosePath(undefined); };
+
+        window.SVGPathSegMovetoAbs = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegMovetoAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegMovetoAbs.prototype.toString = function() { return '[object SVGPathSegMovetoAbs]'; };
+        SVGPathSegMovetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegMovetoAbs.prototype.clone = function() { return new SVGPathSegMovetoAbs(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegMovetoAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegMovetoAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegMovetoRel = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegMovetoRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegMovetoRel.prototype.toString = function() { return '[object SVGPathSegMovetoRel]'; };
+        SVGPathSegMovetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegMovetoRel.prototype.clone = function() { return new SVGPathSegMovetoRel(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegMovetoRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegMovetoRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoAbs = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegLinetoAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoAbs.prototype.toString = function() { return '[object SVGPathSegLinetoAbs]'; };
+        SVGPathSegLinetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegLinetoAbs.prototype.clone = function() { return new SVGPathSegLinetoAbs(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegLinetoAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegLinetoAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoRel = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegLinetoRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoRel.prototype.toString = function() { return '[object SVGPathSegLinetoRel]'; };
+        SVGPathSegLinetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegLinetoRel.prototype.clone = function() { return new SVGPathSegLinetoRel(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegLinetoRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegLinetoRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoCubicAbs = function(owningPathSegList, x, y, x1, y1, x2, y2) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x1 = x1;
+            this._y1 = y1;
+            this._x2 = x2;
+            this._y2 = y2;
+        };
+        SVGPathSegCurvetoCubicAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoCubicAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicAbs]'; };
+        SVGPathSegCurvetoCubicAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoCubicAbs.prototype.clone = function() { return new SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); };
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicAbs.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoCubicRel = function(owningPathSegList, x, y, x1, y1, x2, y2) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x1 = x1;
+            this._y1 = y1;
+            this._x2 = x2;
+            this._y2 = y2;
+        };
+        SVGPathSegCurvetoCubicRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoCubicRel.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicRel]'; };
+        SVGPathSegCurvetoCubicRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoCubicRel.prototype.clone = function() { return new SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); };
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicRel.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoQuadraticAbs = function(owningPathSegList, x, y, x1, y1) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x1 = x1;
+            this._y1 = y1;
+        };
+        SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoQuadraticAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticAbs]'; };
+        SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoQuadraticAbs.prototype.clone = function() { return new SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); };
+        Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticAbs.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoQuadraticRel = function(owningPathSegList, x, y, x1, y1) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x1 = x1;
+            this._y1 = y1;
+        };
+        SVGPathSegCurvetoQuadraticRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoQuadraticRel.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticRel]'; };
+        SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoQuadraticRel.prototype.clone = function() { return new SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); };
+        Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype, 'x1', { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticRel.prototype, 'y1', { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegArcAbs = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._r1 = r1;
+            this._r2 = r2;
+            this._angle = angle;
+            this._largeArcFlag = largeArcFlag;
+            this._sweepFlag = sweepFlag;
+        };
+        SVGPathSegArcAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegArcAbs.prototype.toString = function() { return '[object SVGPathSegArcAbs]'; };
+        SVGPathSegArcAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegArcAbs.prototype.clone = function() { return new SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); };
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'r1', { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'r2', { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'angle', { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'largeArcFlag', { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcAbs.prototype, 'sweepFlag', { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegArcRel = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._r1 = r1;
+            this._r2 = r2;
+            this._angle = angle;
+            this._largeArcFlag = largeArcFlag;
+            this._sweepFlag = sweepFlag;
+        };
+        SVGPathSegArcRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegArcRel.prototype.toString = function() { return '[object SVGPathSegArcRel]'; };
+        SVGPathSegArcRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegArcRel.prototype.clone = function() { return new SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); };
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'r1', { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'r2', { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'angle', { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'largeArcFlag', { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegArcRel.prototype, 'sweepFlag', { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoHorizontalAbs = function(owningPathSegList, x) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);
+            this._x = x;
+        };
+        SVGPathSegLinetoHorizontalAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoHorizontalAbs.prototype.toString = function() { return '[object SVGPathSegLinetoHorizontalAbs]'; };
+        SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x; };
+        SVGPathSegLinetoHorizontalAbs.prototype.clone = function() { return new SVGPathSegLinetoHorizontalAbs(undefined, this._x); };
+        Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoHorizontalRel = function(owningPathSegList, x) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);
+            this._x = x;
+        };
+        SVGPathSegLinetoHorizontalRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoHorizontalRel.prototype.toString = function() { return '[object SVGPathSegLinetoHorizontalRel]'; };
+        SVGPathSegLinetoHorizontalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x; };
+        SVGPathSegLinetoHorizontalRel.prototype.clone = function() { return new SVGPathSegLinetoHorizontalRel(undefined, this._x); };
+        Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoVerticalAbs = function(owningPathSegList, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);
+            this._y = y;
+        };
+        SVGPathSegLinetoVerticalAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoVerticalAbs.prototype.toString = function() { return '[object SVGPathSegLinetoVerticalAbs]'; };
+        SVGPathSegLinetoVerticalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._y; };
+        SVGPathSegLinetoVerticalAbs.prototype.clone = function() { return new SVGPathSegLinetoVerticalAbs(undefined, this._y); };
+        Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegLinetoVerticalRel = function(owningPathSegList, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);
+            this._y = y;
+        };
+        SVGPathSegLinetoVerticalRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegLinetoVerticalRel.prototype.toString = function() { return '[object SVGPathSegLinetoVerticalRel]'; };
+        SVGPathSegLinetoVerticalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._y; };
+        SVGPathSegLinetoVerticalRel.prototype.clone = function() { return new SVGPathSegLinetoVerticalRel(undefined, this._y); };
+        Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoCubicSmoothAbs = function(owningPathSegList, x, y, x2, y2) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x2 = x2;
+            this._y2 = y2;
+        };
+        SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicSmoothAbs]'; };
+        SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function() { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); };
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoCubicSmoothRel = function(owningPathSegList, x, y, x2, y2) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);
+            this._x = x;
+            this._y = y;
+            this._x2 = x2;
+            this._y2 = y2;
+        };
+        SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function() { return '[object SVGPathSegCurvetoCubicSmoothRel]'; };
+        SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function() { return new SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); };
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype, 'x2', { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoCubicSmoothRel.prototype, 'y2', { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoQuadraticSmoothAbs = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; };
+        SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function() { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        window.SVGPathSegCurvetoQuadraticSmoothRel = function(owningPathSegList, x, y) {
+            SVGPathSeg.call(this, SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);
+            this._x = x;
+            this._y = y;
+        };
+        SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(SVGPathSeg.prototype);
+        SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function() { return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; };
+        SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; };
+        SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function() { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); };
+        Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'x', { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
+        Object.defineProperty(SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'y', { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
+
+        // Add createSVGPathSeg* functions to SVGPathElement.
+        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathElement.
+        SVGPathElement.prototype.createSVGPathSegClosePath = function() { return new SVGPathSegClosePath(undefined); };
+        SVGPathElement.prototype.createSVGPathSegMovetoAbs = function(x, y) { return new SVGPathSegMovetoAbs(undefined, x, y); };
+        SVGPathElement.prototype.createSVGPathSegMovetoRel = function(x, y) { return new SVGPathSegMovetoRel(undefined, x, y); };
+        SVGPathElement.prototype.createSVGPathSegLinetoAbs = function(x, y) { return new SVGPathSegLinetoAbs(undefined, x, y); };
+        SVGPathElement.prototype.createSVGPathSegLinetoRel = function(x, y) { return new SVGPathSegLinetoRel(undefined, x, y); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function(x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function(x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function(x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function(x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); };
+        SVGPathElement.prototype.createSVGPathSegArcAbs = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
+        SVGPathElement.prototype.createSVGPathSegArcRel = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
+        SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function(x) { return new SVGPathSegLinetoHorizontalAbs(undefined, x); };
+        SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function(x) { return new SVGPathSegLinetoHorizontalRel(undefined, x); };
+        SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function(y) { return new SVGPathSegLinetoVerticalAbs(undefined, y); };
+        SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function(y) { return new SVGPathSegLinetoVerticalRel(undefined, y); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function(x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function(x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function(x, y) { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); };
+        SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function(x, y) { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); };
+    }
+
+    if (!('SVGPathSegList' in window)) {
+        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList
+        window.SVGPathSegList = function(pathElement) {
+            this._pathElement = pathElement;
+            this._list = this._parsePath(this._pathElement.getAttribute('d'));
+
+            // Use a MutationObserver to catch changes to the path's 'd' attribute.
+            this._mutationObserverConfig = { 'attributes': true, 'attributeFilter': ['d'] };
+            this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));
+            this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
+        };
+
+        SVGPathSegList.prototype.classname = 'SVGPathSegList';
+
+        Object.defineProperty(SVGPathSegList.prototype, 'numberOfItems', {
+            get: function() {
+                this._checkPathSynchronizedToList();
+                return this._list.length;
+            },
+            enumerable: true
+        });
+
+        // Add the pathSegList accessors to SVGPathElement.
+        // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData
+        Object.defineProperty(SVGPathElement.prototype, 'pathSegList', {
+            get: function() {
+                if (!this._pathSegList)
+                    this._pathSegList = new SVGPathSegList(this);
+                return this._pathSegList;
+            },
+            enumerable: true
+        });
+        // FIXME: The following are not implemented and simply return SVGPathElement.pathSegList.
+        Object.defineProperty(SVGPathElement.prototype, 'normalizedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });
+        Object.defineProperty(SVGPathElement.prototype, 'animatedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });
+        Object.defineProperty(SVGPathElement.prototype, 'animatedNormalizedPathSegList', { get: function() { return this.pathSegList; }, enumerable: true });
+
+        // Process any pending mutations to the path element and update the list as needed.
+        // This should be the first call of all public functions and is needed because
+        // MutationObservers are not synchronous so we can have pending asynchronous mutations.
+        SVGPathSegList.prototype._checkPathSynchronizedToList = function() {
+            this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());
+        };
+
+        SVGPathSegList.prototype._updateListFromPathMutations = function(mutationRecords) {
+            if (!this._pathElement)
+                return;
+            var hasPathMutations = false;
+            mutationRecords.forEach(function(record) {
+                if (record.attributeName == 'd')
+                    hasPathMutations = true;
+            });
+            if (hasPathMutations)
+                this._list = this._parsePath(this._pathElement.getAttribute('d'));
+        };
+
+        // Serialize the list and update the path's 'd' attribute.
+        SVGPathSegList.prototype._writeListToPath = function() {
+            this._pathElementMutationObserver.disconnect();
+            this._pathElement.setAttribute('d', SVGPathSegList._pathSegArrayAsString(this._list));
+            this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
+        };
+
+        // When a path segment changes the list needs to be synchronized back to the path element.
+        SVGPathSegList.prototype.segmentChanged = function(pathSeg) {
+            this._writeListToPath();
+        };
+
+        SVGPathSegList.prototype.clear = function() {
+            this._checkPathSynchronizedToList();
+
+            this._list.forEach(function(pathSeg) {
+                pathSeg._owningPathSegList = null;
+            });
+            this._list = [];
+            this._writeListToPath();
+        };
+
+        SVGPathSegList.prototype.initialize = function(newItem) {
+            this._checkPathSynchronizedToList();
+
+            this._list = [newItem];
+            newItem._owningPathSegList = this;
+            this._writeListToPath();
+            return newItem;
+        };
+
+        SVGPathSegList.prototype._checkValidIndex = function(index) {
+            if (isNaN(index) || index < 0 || index >= this.numberOfItems)
+                throw 'INDEX_SIZE_ERR';
+        };
+
+        SVGPathSegList.prototype.getItem = function(index) {
+            this._checkPathSynchronizedToList();
+
+            this._checkValidIndex(index);
+            return this._list[index];
+        };
+
+        SVGPathSegList.prototype.insertItemBefore = function(newItem, index) {
+            this._checkPathSynchronizedToList();
+
+            // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
+            if (index > this.numberOfItems)
+                index = this.numberOfItems;
+            if (newItem._owningPathSegList) {
+                // SVG2 spec says to make a copy.
+                newItem = newItem.clone();
+            }
+            this._list.splice(index, 0, newItem);
+            newItem._owningPathSegList = this;
+            this._writeListToPath();
+            return newItem;
+        };
+
+        SVGPathSegList.prototype.replaceItem = function(newItem, index) {
+            this._checkPathSynchronizedToList();
+
+            if (newItem._owningPathSegList) {
+                // SVG2 spec says to make a copy.
+                newItem = newItem.clone();
+            }
+            this._checkValidIndex(index);
+            this._list[index] = newItem;
+            newItem._owningPathSegList = this;
+            this._writeListToPath();
+            return newItem;
+        };
+
+        SVGPathSegList.prototype.removeItem = function(index) {
+            this._checkPathSynchronizedToList();
+
+            this._checkValidIndex(index);
+            var item = this._list[index];
+            this._list.splice(index, 1);
+            this._writeListToPath();
+            return item;
+        };
+
+        SVGPathSegList.prototype.appendItem = function(newItem) {
+            this._checkPathSynchronizedToList();
+
+            if (newItem._owningPathSegList) {
+                // SVG2 spec says to make a copy.
+                newItem = newItem.clone();
+            }
+            this._list.push(newItem);
+            newItem._owningPathSegList = this;
+            // TODO: Optimize this to just append to the existing attribute.
+            this._writeListToPath();
+            return newItem;
+        };
+
+        SVGPathSegList.prototype.matrixTransform = function(aSVGMatrix) {
+            this._checkPathSynchronizedToList();
+
+            var nLength = this._list.length;
+            for( var i = 0; i < nLength; ++i )
+            {
+                var nX;
+                var aPathSeg = this._list[i];
+                switch( aPathSeg.pathSegTypeAsLetter )
+                {
+                    case 'C':
+                        nX = aPathSeg._x2;
+                        aPathSeg._x2 = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y2 + aSVGMatrix.e;
+                        aPathSeg._y2 = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y2 + aSVGMatrix.f;
+                    // fall through intended
+                    case 'Q':
+                        nX = aPathSeg._x1;
+                        aPathSeg._x1 = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y1 + aSVGMatrix.e;
+                        aPathSeg._y1 = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y1 + aSVGMatrix.f;
+                    // fall through intended
+                    case 'M':
+                    case 'L':
+                        nX = aPathSeg._x;
+                        aPathSeg._x = aSVGMatrix.a * nX + aSVGMatrix.c * aPathSeg._y + aSVGMatrix.e;
+                        aPathSeg._y = aSVGMatrix.b * nX + aSVGMatrix.d * aPathSeg._y + aSVGMatrix.f;
+                        break;
+                    default:
+                        log( 'SVGPathSeg.matrixTransform: unexpected path segment type: '
+                            + aPathSeg.pathSegTypeAsLetter );
+                }
+            }
+
+            this._writeListToPath();
+        };
+
+        SVGPathSegList.prototype.changeOrientation = function() {
+            this._checkPathSynchronizedToList();
+
+            var aPathSegList = this._list;
+            var nLength = aPathSegList.length;
+            if( nLength == 0 ) return;
+
+            var nCurrentX = 0;
+            var nCurrentY = 0;
+
+            var aPathSeg = aPathSegList[0];
+            if( aPathSeg.pathSegTypeAsLetter == 'M' )
+            {
+                nCurrentX = aPathSeg.x;
+                nCurrentY = aPathSeg.y;
+                aPathSegList.shift();
+                --nLength;
+            }
+
+            var i;
+            for( i = 0; i < nLength; ++i )
+            {
+                aPathSeg = aPathSegList[i];
+                switch( aPathSeg.pathSegTypeAsLetter )
+                {
+                    case 'C':
+                        var nX = aPathSeg._x1;
+                        aPathSeg._x1 = aPathSeg._x2;
+                        aPathSeg._x2 = nX;
+                        var nY = aPathSeg._y1;
+                        aPathSeg._y1 = aPathSeg._y2;
+                        aPathSeg._y2 = nY;
+                    // fall through intended
+                    case 'M':
+                    case 'L':
+                    case 'Q':
+                        var aPoint = { x: aPathSeg._x, y: aPathSeg._y };
+                        aPathSeg._x = nCurrentX;
+                        aPathSeg._y = nCurrentY;
+                        nCurrentX = aPoint.x;
+                        nCurrentY = aPoint.y;
+                        break;
+                    default:
+                        log( 'SVGPathSegList.changeOrientation: unexpected path segment type: '
+                            + aPathSeg.pathSegTypeAsLetter );
+                }
+
+            }
+
+            aPathSegList.reverse();
+
+            var aMovePathSeg = new SVGPathSegMovetoAbs( this, nCurrentX, nCurrentY );
+            aPathSegList.unshift( aMovePathSeg );
+
+            this._writeListToPath();
+        };
+
+        SVGPathSegList._pathSegArrayAsString = function(pathSegArray) {
+            var string = '';
+            var first = true;
+            pathSegArray.forEach(function(pathSeg) {
+                if (first) {
+                    first = false;
+                    string += pathSeg._asPathString();
+                } else {
+                    string += ' ' + pathSeg._asPathString();
+                }
+            });
+            return string;
+        };
+
+        // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.
+        SVGPathSegList.prototype._parsePath = function(string) {
+            if (!string || string.length == 0)
+                return [];
+
+            var owningPathSegList = this;
+
+            var Builder = function() {
+                this.pathSegList = [];
+            };
+
+            Builder.prototype.appendSegment = function(pathSeg) {
+                this.pathSegList.push(pathSeg);
+            };
+
+            var Source = function(string) {
+                this._string = string;
+                this._currentIndex = 0;
+                this._endIndex = this._string.length;
+                this._previousCommand = SVGPathSeg.PATHSEG_UNKNOWN;
+
+                this._skipOptionalSpaces();
+            };
+
+            Source.prototype._isCurrentSpace = function() {
+                var character = this._string[this._currentIndex];
+                return character <= ' ' && (character == ' ' || character == '\n' || character == '\t' || character == '\r' || character == '\f');
+            };
+
+            Source.prototype._skipOptionalSpaces = function() {
+                while (this._currentIndex < this._endIndex && this._isCurrentSpace())
+                    this._currentIndex++;
+                return this._currentIndex < this._endIndex;
+            };
+
+            Source.prototype._skipOptionalSpacesOrDelimiter = function() {
+                if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != ',')
+                    return false;
+                if (this._skipOptionalSpaces()) {
+                    if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == ',') {
+                        this._currentIndex++;
+                        this._skipOptionalSpaces();
+                    }
+                }
+                return this._currentIndex < this._endIndex;
+            };
+
+            Source.prototype.hasMoreData = function() {
+                return this._currentIndex < this._endIndex;
+            };
+
+            Source.prototype.peekSegmentType = function() {
+                var lookahead = this._string[this._currentIndex];
+                return this._pathSegTypeFromChar(lookahead);
+            };
+
+            Source.prototype._pathSegTypeFromChar = function(lookahead) {
+                switch (lookahead) {
+                    case 'Z':
+                    case 'z':
+                        return SVGPathSeg.PATHSEG_CLOSEPATH;
+                    case 'M':
+                        return SVGPathSeg.PATHSEG_MOVETO_ABS;
+                    case 'm':
+                        return SVGPathSeg.PATHSEG_MOVETO_REL;
+                    case 'L':
+                        return SVGPathSeg.PATHSEG_LINETO_ABS;
+                    case 'l':
+                        return SVGPathSeg.PATHSEG_LINETO_REL;
+                    case 'C':
+                        return SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;
+                    case 'c':
+                        return SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;
+                    case 'Q':
+                        return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;
+                    case 'q':
+                        return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;
+                    case 'A':
+                        return SVGPathSeg.PATHSEG_ARC_ABS;
+                    case 'a':
+                        return SVGPathSeg.PATHSEG_ARC_REL;
+                    case 'H':
+                        return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;
+                    case 'h':
+                        return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;
+                    case 'V':
+                        return SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;
+                    case 'v':
+                        return SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;
+                    case 'S':
+                        return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;
+                    case 's':
+                        return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;
+                    case 'T':
+                        return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;
+                    case 't':
+                        return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;
+                    default:
+                        return SVGPathSeg.PATHSEG_UNKNOWN;
+                }
+            };
+
+            Source.prototype._nextCommandHelper = function(lookahead, previousCommand) {
+                // Check for remaining coordinates in the current command.
+                if ((lookahead == '+' || lookahead == '-' || lookahead == '.' || (lookahead >= '0' && lookahead <= '9')) && previousCommand != SVGPathSeg.PATHSEG_CLOSEPATH) {
+                    if (previousCommand == SVGPathSeg.PATHSEG_MOVETO_ABS)
+                        return SVGPathSeg.PATHSEG_LINETO_ABS;
+                    if (previousCommand == SVGPathSeg.PATHSEG_MOVETO_REL)
+                        return SVGPathSeg.PATHSEG_LINETO_REL;
+                    return previousCommand;
+                }
+                return SVGPathSeg.PATHSEG_UNKNOWN;
+            };
+
+            Source.prototype.initialCommandIsMoveTo = function() {
+                // If the path is empty it is still valid, so return true.
+                if (!this.hasMoreData())
+                    return true;
+                var command = this.peekSegmentType();
+                // Path must start with moveTo.
+                return command == SVGPathSeg.PATHSEG_MOVETO_ABS || command == SVGPathSeg.PATHSEG_MOVETO_REL;
+            };
+
+            // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.
+            // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF
+            Source.prototype._parseNumber = function() {
+                var exponent = 0;
+                var integer = 0;
+                var frac = 1;
+                var decimal = 0;
+                var sign = 1;
+                var expsign = 1;
+
+                var startIndex = this._currentIndex;
+
+                this._skipOptionalSpaces();
+
+                // Read the sign.
+                if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '+')
+                    this._currentIndex++;
+                else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '-') {
+                    this._currentIndex++;
+                    sign = -1;
+                }
+
+                if (this._currentIndex == this._endIndex || ((this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') && this._string.charAt(this._currentIndex) != '.'))
+                // The first character of a number must be one of [0-9+-.].
+                    return undefined;
+
+                // Read the integer part, build right-to-left.
+                var startIntPartIndex = this._currentIndex;
+                while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9')
+                    this._currentIndex++; // Advance to first non-digit.
+
+                if (this._currentIndex != startIntPartIndex) {
+                    var scanIntPartIndex = this._currentIndex - 1;
+                    var multiplier = 1;
+                    while (scanIntPartIndex >= startIntPartIndex) {
+                        integer += multiplier * (this._string.charAt(scanIntPartIndex--) - '0');
+                        multiplier *= 10;
+                    }
+                }
+
+                // Read the decimals.
+                if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == '.') {
+                    this._currentIndex++;
+
+                    // There must be a least one digit following the .
+                    if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9')
+                        return undefined;
+                    while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {
+                        frac *= 10;
+                        decimal += (this._string.charAt(this._currentIndex) - '0') / frac;
+                        this._currentIndex += 1;
+                    }
+                }
+
+                // Read the exponent part.
+                if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == 'e' || this._string.charAt(this._currentIndex) == 'E') && (this._string.charAt(this._currentIndex + 1) != 'x' && this._string.charAt(this._currentIndex + 1) != 'm')) {
+                    this._currentIndex++;
+
+                    // Read the sign of the exponent.
+                    if (this._string.charAt(this._currentIndex) == '+') {
+                        this._currentIndex++;
+                    } else if (this._string.charAt(this._currentIndex) == '-') {
+                        this._currentIndex++;
+                        expsign = -1;
+                    }
+
+                    // There must be an exponent.
+                    if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9')
+                        return undefined;
+
+                    while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {
+                        exponent *= 10;
+                        exponent += (this._string.charAt(this._currentIndex) - '0');
+                        this._currentIndex++;
+                    }
+                }
+
+                var number = integer + decimal;
+                number *= sign;
+
+                if (exponent)
+                    number *= Math.pow(10, expsign * exponent);
+
+                if (startIndex == this._currentIndex)
+                    return undefined;
+
+                this._skipOptionalSpacesOrDelimiter();
+
+                return number;
+            };
+
+            Source.prototype._parseArcFlag = function() {
+                if (this._currentIndex >= this._endIndex)
+                    return undefined;
+                var flag = false;
+                var flagChar = this._string.charAt(this._currentIndex++);
+                if (flagChar == '0')
+                    flag = false;
+                else if (flagChar == '1')
+                    flag = true;
+                else
+                    return undefined;
+
+                this._skipOptionalSpacesOrDelimiter();
+                return flag;
+            };
+
+            Source.prototype.parseSegment = function() {
+                var lookahead = this._string[this._currentIndex];
+                var command = this._pathSegTypeFromChar(lookahead);
+                if (command == SVGPathSeg.PATHSEG_UNKNOWN) {
+                    // Possibly an implicit command. Not allowed if this is the first command.
+                    if (this._previousCommand == SVGPathSeg.PATHSEG_UNKNOWN)
+                        return null;
+                    command = this._nextCommandHelper(lookahead, this._previousCommand);
+                    if (command == SVGPathSeg.PATHSEG_UNKNOWN)
+                        return null;
+                } else {
+                    this._currentIndex++;
+                }
+
+                this._previousCommand = command;
+
+                switch (command) {
+                    case SVGPathSeg.PATHSEG_MOVETO_REL:
+                        return new SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_MOVETO_ABS:
+                        return new SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_REL:
+                        return new SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_ABS:
+                        return new SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
+                        return new SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
+                        return new SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:
+                        return new SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());
+                    case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
+                        return new SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());
+                    case SVGPathSeg.PATHSEG_CLOSEPATH:
+                        this._skipOptionalSpaces();
+                        return new SVGPathSegClosePath(owningPathSegList);
+                    case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
+                    case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
+                    case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
+                        var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);
+                    case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
+                        var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);
+                    case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);
+                    case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);
+                    case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
+                        return new SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
+                        return new SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
+                    case SVGPathSeg.PATHSEG_ARC_REL:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
+                    case SVGPathSeg.PATHSEG_ARC_ABS:
+                        var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
+                        return new SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
+                    default:
+                        throw 'Unknown path seg type.'
+                }
+            };
+
+            var builder = new Builder();
+            var source = new Source(string);
+
+            if (!source.initialCommandIsMoveTo())
+                return [];
+            while (source.hasMoreData()) {
+                var pathSeg = source.parseSegment();
+                if (!pathSeg)
+                    return [];
+                builder.appendSegment(pathSeg);
+            }
+
+            return builder.pathSegList;
+        }
+    }
+}());
+
+/*****
+ * @svgpathend
+ *
+ *  The above code is a derivative work of some part of the SVGPathSeg API.
+ *
+ *  This API is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from
+ *  SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec
+ *  changes which were implemented in Firefox 43 and Chrome 46.
+ *
+ *  @source https://github.com/progers/pathseg
+ */
+
 
 /*****
  * @licstart
@@ -712,7 +1690,6 @@ function configureDetectionTools()
  */
 
 
-
 /*****
  * @libreofficestart
  *
@@ -3592,6 +4569,12 @@ SVGPathElement.prototype.appendPath = function( aPath )
  */
 SVGPathElement.prototype.matrixTransform = function( aSVGMatrix )
 {
+    if( SVGPathSegList.prototype.matrixTransform )
+    {
+        this.pathSegList.matrixTransform( aSVGMatrix );
+        return;
+    }
+
     var aPathSegList = this.pathSegList;
     var nLength = aPathSegList.numberOfItems;
     var i;
@@ -3611,6 +4594,12 @@ SVGPathElement.prototype.changeOrientation = function()
     var nLength = aPathSegList.numberOfItems;
     if( nLength == 0 ) return;
 
+    if( SVGPathSegList.prototype.changeOrientation )
+    {
+        aPathSegList.changeOrientation();
+        return;
+    }
+
     var nCurrentX = 0;
     var nCurrentY = 0;
 
@@ -3652,7 +4641,6 @@ SVGPathElement.prototype.changeOrientation = function()
  *  We exploit this fact for providing a different implementation.
  */
 
-var SVGPathSeg = typeof SVGPathSeg === 'undefined' ? function() {} : SVGPathSeg;
 
 try
 {   // Firefox, Google Chrome, Internet Explorer, Safari.
diff --git a/readlicense_oo/license/LICENSE b/readlicense_oo/license/LICENSE
index 328b7d3..b840d4b 100644
--- a/readlicense_oo/license/LICENSE
+++ b/readlicense_oo/license/LICENSE
@@ -2369,6 +2369,44 @@ STLPort
      no representations about the suitability of this software for any
      purpose. It is provided "as is" without express or implied warranty.
 
+SVGPathSeg polyfill
+
+   The following software may be included in this product: SVGPathSeg
+   polyfill. Use of any of this software is governed by the terms of
+   the license below:
+
+   Copyright 2015 The Chromium Authors. All rights reserved.
+
+   The Chromium Authors can be found at
+   http://src.chromium.org/svn/trunk/src/AUTHORS
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+      * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+      * Neither the name of Google Inc. nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
 TWAIN
 
    The following software may be included in this product: TWAIN. Use of
diff --git a/readlicense_oo/license/LICENSE.fodt b/readlicense_oo/license/LICENSE.fodt
index 3f7f435..a90fd71 100644
--- a/readlicense_oo/license/LICENSE.fodt
+++ b/readlicense_oo/license/LICENSE.fodt
@@ -4020,6 +4020,38 @@
    <text:p text:style-name="P67">Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Hewlett-Packard Company makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.</text:p>
    <text:p text:style-name="P67">Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Silicon Graphics makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.</text:p>
    <text:p text:style-name="P67">Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Moscow Center for SPARC Technology makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.</text:p>
+   <text:h text:style-name="Heading_20_2" text:outline-level="2">SVGPathSeg polyfill</text:h>
+   <text:p text:style-name="Standard">The following software may be included in this product: SVGPathSeg polyfill. Use of any of this software is governed by the terms of the license below:</text:p>
+   <text:p text:style-name="Preformatted_20_Text">Copyright 2015 The Chromium Authors. All rights reserved.</text:p>
+   <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/></text:p>
+   <text:p text:style-name="Preformatted_20_Text">The Chromium Authors can be found at</text:p>
+   <text:p text:style-name="Preformatted_20_Text">http://src.chromium.org/svn/trunk/src/AUTHORS</text:p>
+   <text:p text:style-name="Preformatted_20_Text"/>
+   <text:p text:style-name="Preformatted_20_Text">Redistribution and use in source and binary forms, with or without</text:p>
+   <text:p text:style-name="Preformatted_20_Text">modification, are permitted provided that the following conditions are</text:p>
+   <text:p text:style-name="Preformatted_20_Text">met:</text:p>
+   <text:p text:style-name="Preformatted_20_Text"/>
+   <text:p text:style-name="Preformatted_20_Text"><text:s text:c="3"/>* Redistributions of source code must retain the above copyright</text:p>
+   <text:p text:style-name="Preformatted_20_Text">notice, this list of conditions and the following disclaimer.</text:p>
+   <text:p text:style-name="Preformatted_20_Text"><text:s text:c="3"/>* Redistributions in binary form must reproduce the above</text:p>
+   <text:p text:style-name="Preformatted_20_Text">copyright notice, this list of conditions and the following disclaimer</text:p>
+   <text:p text:style-name="Preformatted_20_Text">in the documentation and/or other materials provided with the</text:p>
+   <text:p text:style-name="Preformatted_20_Text">distribution.</text:p>
+   <text:p text:style-name="Preformatted_20_Text"><text:s text:c="3"/>* Neither the name of Google Inc. nor the names of its</text:p>
+   <text:p text:style-name="Preformatted_20_Text">contributors may be used to endorse or promote products derived from</text:p>
+   <text:p text:style-name="Preformatted_20_Text">this software without specific prior written permission.</text:p>
+   <text:p text:style-name="Preformatted_20_Text"/>
+   <text:p text:style-name="Preformatted_20_Text">THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</text:p>
+   <text:p text:style-name="Preformatted_20_Text">"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</text:p>
+   <text:p text:style-name="Preformatted_20_Text">LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</text:p>
+   <text:p text:style-name="Preformatted_20_Text">A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</text:p>
+   <text:p text:style-name="Preformatted_20_Text">OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</text:p>
+   <text:p text:style-name="Preformatted_20_Text">SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</text:p>
+   <text:p text:style-name="Preformatted_20_Text">LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</text:p>
+   <text:p text:style-name="Preformatted_20_Text">DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</text:p>
+   <text:p text:style-name="Preformatted_20_Text">THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</text:p>
+   <text:p text:style-name="Preformatted_20_Text">(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</text:p>
+   <text:p text:style-name="P8">OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</text:p>
    <text:h text:style-name="Heading_20_2" text:outline-level="2">TWAIN</text:h>
    <text:p text:style-name="Standard">The following software may be included in this product: TWAIN. Use of any of this software is governed by the terms of the license below:</text:p>
    <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:soft-page-break/>The TWAIN License</text:h>
diff --git a/readlicense_oo/license/LICENSE.html b/readlicense_oo/license/LICENSE.html
index 493ed6c..47b12ea 100644
--- a/readlicense_oo/license/LICENSE.html
+++ b/readlicense_oo/license/LICENSE.html
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by LibreOffice - see http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/xslt for the code.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xml:lang="en-US">Licensing and Legal information</title><meta name="DCTERMS.title" content="Licensing and Legal information" xml:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2011-05-11T11:39:17.79" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.contributor" content="Tor Lillqvist"/><meta name="DCTERMS.modified" content="2015-01-12T14:53:31.375949809" scheme="DCTERMS.W3CDTF"/><meta name="D
 CTERMS.provenance" content="" xml:lang="en-US"/><meta name="DCTERMS.subject" content="LibreOffice Licensing and Legal information, License, GPL, LGPL, MPL, Apache, CC" xml:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><!--This file was converted to xhtml by LibreOffice - see http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/xslt for the code.--><head profile="http://dublincore.org/documents/dcmi-terms/"><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/><title xml:lang="en-US">Licensing and Legal information</title><meta name="DCTERMS.title" content="Licensing and Legal information" xml:lang="en-US"/><meta name="DCTERMS.language" content="en-US" scheme="DCTERMS.RFC4646"/><meta name="DCTERMS.source" content="http://xml.openoffice.org/odf2xhtml"/><meta name="DCTERMS.issued" content="2011-05-11T11:39:17.79" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.modified" content="2015-05-22T10:18:42.401712240" scheme="DCTERMS.W3CDTF"/><meta name="DCTERMS.provenance" content="" xml:lang="en-US"/><meta name
 ="DCTERMS.subject" content="LibreOffice Licensing and Legal information, License, GPL, LGPL, MPL, Apache, CC" xml:lang="en-US"/><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" hreflang="en"/><link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" hreflang="en"/><link rel="schema.DCTYPE" href="http://purl.org/dc/dcmitype/" hreflang="en"/><link rel="schema.DCAM" href="http://purl.org/dc/dcam/" hreflang="en"/><style type="text/css">
 	@page {  }
 	table { border-collapse:collapse; border-spacing:0; empty-cells:show }
 	td, th { vertical-align:top; font-size:12pt;}
@@ -11,184 +11,98 @@
 	span.footnodeNumber { padding-right:1em; }
 	span.annotation_style_by_filter { font-size:95%; font-family:Arial; background-color:#fff000;  margin:0; border:0; padding:0;  }
 	* { margin:0;}
-	.Contents_20_1 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; }
-	.Contents_20_2 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; margin-left:0.499cm; margin-right:0cm; text-indent:0cm; }
-	.Contents_20_3 { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; margin-left:0.998cm; margin-right:0cm; text-indent:0cm; }
-	.Contents_20_Heading { font-size:16pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Sans; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; font-weight:bold; }
-	.Heading_20_1 { font-size:115%; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; font-weight:bold; }
-	.Heading_20_2 { font-size:14pt; margin-bottom:0cm; margin-top:0.3cm; font-family:DejaVu Sans; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; font-style:italic; font-weight:bold; }
-	.Heading_20_3 { font-size:12pt; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; font-weight:bold; }
-	.Heading_20_4 { font-size:12pt; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans Condensed; writing-mode:page; font-weight:bold; }
-	.List_20_Contents { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; margin-left:1cm; margin-right:0cm; text-indent:0cm; }
-	.List_20_Heading { font-size:12pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; margin-left:0cm; margin-right:0cm; text-indent:0cm; }
-	.P1 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; text-decoration:none ! important; }
-	.P10 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P100 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P101 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P102 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P104 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P105 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P106 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P107 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P108 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P109 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P11 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P110 { font-size:12pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P112 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P113 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P114 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P115 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P116 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P117 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P118 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P119 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P12 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P120 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P121 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P122 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; font-weight:bold; }
-	.P123 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P124 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P125 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P126 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P127 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P128 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P129 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P13 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P130 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P131 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P132 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P133 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P134 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P135 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P136 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P137 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P138 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P139 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P14 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P140 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P141 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P142 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P143 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P144 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P145 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P146 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P147 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P148 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P149 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P15 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P150 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P151 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P152 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P153 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P154 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P155 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P156 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P157 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; margin-left:2.501cm; margin-right:0cm; text-indent:-0.635cm; }
-	.P158 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; margin-left:2.501cm; margin-right:0cm; text-indent:-0.635cm; }
-	.P159 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; margin-left:1.402cm; margin-right:0cm; text-indent:-0.767cm; font-weight:bold; }
-	.P16 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P160 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; margin-left:1.429cm; margin-right:0cm; text-indent:-0.794cm; font-weight:bold; }
-	.P161 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P162 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P163 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P164 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P165 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P166 { font-size:12pt; margin-bottom:0.212cm; margin-top:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P17 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P176 { font-size:115%; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P18 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P19 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P2 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; font-weight:bold; }
-	.P20 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P206 { font-size:12pt; margin-bottom:0cm; margin-left:1cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P207 { font-size:12pt; margin-bottom:0.499cm; margin-left:1cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P208 { font-size:12pt; margin-bottom:0.499cm; margin-left:1cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P21 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P22 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P23 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P24 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P25 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P26 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P27 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P28 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P29 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P3 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; font-weight:bold; }
-	.P30 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P31 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P32 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P33 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P34 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P35 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P36 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P37 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P38 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P39 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P4 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; font-weight:bold; }
-	.P40 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P41 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P42 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P43 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P44 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P45 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P46 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P47 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P48 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P49 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P5 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P50 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P51 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P52 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P53 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P54 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P55 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P56 { font-size:10pt; margin-bottom:0.499cm; margin-top:0.3cm; font-family:DejaVu Sans Mono; writing-mode:lr-tb; }
-	.P57 { font-size:10pt; margin-bottom:0.499cm; margin-top:0.3cm; font-family:DejaVu Sans Mono; writing-mode:page; }
-	.P58 { font-size:10pt; margin-bottom:0cm; margin-top:0cm; font-family:DejaVu Sans Mono; writing-mode:lr-tb; }
-	.P59 { font-size:10pt; margin-bottom:0.499cm; margin-top:0cm; font-family:DejaVu Sans Mono; writing-mode:page; }
-	.P6 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P60 { font-size:12pt; margin-bottom:0.499cm; margin-left:0cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P61 { font-size:12pt; margin-bottom:0.499cm; margin-left:1cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P62 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0.499cm; margin-left:0cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P63 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; margin-left:1.251cm; margin-right:0cm; text-indent:0cm; }
-	.P64 { font-size:18pt; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; text-align:center ! important; font-family:DejaVu Sans; writing-mode:page; }
-	.P65 { font-size:16pt; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P66 { font-size:115%; font-weight:bold; margin-bottom:0.212cm; margin-top:0.423cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P67 { font-size:10pt; margin-bottom:0.499cm; margin-left:1cm; margin-right:1cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; font-style:italic; }
-	.P68 { font-size:12pt; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0cm; text-indent:0cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P7 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P72 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P73 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P74 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P76 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P77 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P78 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P79 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P8 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P80 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P81 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P82 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P83 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; text-decoration:none ! important; }
-	.P84 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P85 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P86 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P87 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P88 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P89 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P9 { font-size:12pt; margin-bottom:0.3cm; margin-top:0.3cm; font-family:DejaVu Serif; writing-mode:page; }
-	.P90 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P92 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }
-	.P93 { font-size:14pt; font-style:italic; font-weight:bold; margin-bottom:0cm; margin-left:0cm; margin-right:0cm; margin-top:0.3cm; text-indent:0cm; font-family:DejaVu Sans; writing-mode:page; }

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list