svgsalamander-0~svn95.orig/0000755000175000017500000000000011562044311014603 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-editor/0000755000175000017500000000000011562044207016672 5ustar moonmoonsvgsalamander-0~svn95.orig/www/0000755000175000017500000000000011562044230015427 5ustar moonmoonsvgsalamander-0~svn95.orig/www/salamanderStyle.css0000644000175000017500000000131110627134103021265 0ustar moonmoon/* Document : __NAME__ Created on : __DATE__, __TIME__ Author : __USER__ Description: Purpose of the stylesheet follows. */ /* TODO customize this sample style Syntax recommendation http://www.w3.org/TR/REC-CSS2/ */ root { display: block; } p.alert { background-color: #ccffcc; background-position: center; border-bottom-color: green; border-bottom-style: solid; border-left-color: green; border-left-style: solid; border-right-color: green; border-right-style: solid; border-top-color: green; border-top-style: solid; font-style: inherit; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px } svgsalamander-0~svn95.orig/www/license/0000755000175000017500000000000011562044207017055 5ustar moonmoonsvgsalamander-0~svn95.orig/www/license/license-bsd.txt0000644000175000017500000000272211362434036022012 0ustar moonmoonCopyright (c) 2010, Mark McKay All rights reserved. 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 the kitfox.com 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 HOLDER 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.svgsalamander-0~svn95.orig/www/license/license-lgpl.txt0000644000175000017500000001721011362434036022176 0ustar moonmoon GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. svgsalamander-0~svn95.orig/www/links.html0000644000175000017500000000164311524225604017445 0ustar moonmoon Important related documents

DOM Event model

SVG 1.1 Spec

svgsalamander-0~svn95.orig/www/alm-process/0000755000175000017500000000000011562044207017660 5ustar moonmoonsvgsalamander-0~svn95.orig/www/alm-process/snippets/0000755000175000017500000000000011562044207021525 5ustar moonmoonsvgsalamander-0~svn95.orig/www/alm-process/snippets/page.xml0000644000175000017500000000066510607673247023205 0ustar moonmoon index.htmlSubprojects svgsalamander-0~svn95.orig/www/maven/0000755000175000017500000000000011562044207016541 5ustar moonmoonsvgsalamander-0~svn95.orig/www/maven/pom.xml0000644000175000017500000000601410607673157020072 0ustar moonmoon 4.0.0 com.kitfox.svg svg-salamander jar 1.0 SVG Salamander SVG Salamander - tools and components for SVG rendering, manipulation and animation http://svgsalamander.dev.java.net Kitfox Studios http://www.kitfox.com scm:cvs:pserver:guest@cvs.dev.java.net:/cvs:svgsalamander Mark McKay mark at kitfox.com GNU Lesser General Public License (LGPL) http://www.gnu.org/copyleft/lesser.html repo Announcement List announce-subscribe@svgsalamander.dev.java.net announce-unsubscribe@svgsalamander.dev.java.net https://svgsalamander.dev.java.net/servlets/SummarizeList?listName=announce Developer List dev-subscribe@svgsalamander.dev.java.net dev-unsubscribe@svgsalamander.dev.java.net https://svgsalamander.dev.java.net/servlets/SummarizeList?listName=dev Users List users-subscribe@svgsalamander.dev.java.net users-unsubscribe@svgsalamander.dev.java.net https://svgsalamander.dev.java.net/servlets/SummarizeList?listName=users Issues List issues-subscribe@svgsalamander.dev.java.net issues-unsubscribe@svgsalamander.dev.java.net https://svgsalamander.dev.java.net/servlets/SummarizeList?listName=issues CVS List cvs-subscribe@svgsalamander.dev.java.net cvs-unsubscribe@svgsalamander.dev.java.net https://svgsalamander.dev.java.net/servlets/SummarizeList?listName=cvs svgsalamander-0~svn95.orig/www/docs/0000755000175000017500000000000011562044330016360 5ustar moonmoonsvgsalamander-0~svn95.orig/www/docs/use.html0000644000175000017500000003240111524225604020045 0ustar moonmoon Default Project Content

Using SVG Salamander

SVG Salamander is 100% pure Java, so using it in your application should not be any different than using any other JAR.

Take a look at the com.kitfox.svg.app.SVGPlayer and com.kitfox.svg.app.SVGViewer files for some straight forward ways to use Salamander.

The basic process is:

The SVGDiagram is the object you are going to be most concerned with. It provides a way to access the root of the SVG document you loaded and a means to render it to a Graphics2D.

Accessing the document

All elements in an SVG document can be given an id that can be used to access the document in parts. For example, you can create a circle with the code <circle id="myCircle" cx="100" cy="100" r="50"/>. This circle can be referenced later with the key word 'myCircle'.

SVG Salamander provides the ability to access document parts with SVGDiagram.getElement(String elementName). You can then read and write the attributes of the element directly.

Using SVG in forms

The Salamander JAR contains some controls to let you use SVG easily in Swing forms. They are:

These components are both beans and can be used in NetBeans or other beans aware Java editors. Once you have installed the Jar in your editor (see your IDE's documentation for how to do this), you can place them on your form.

Both of these beans have anti-aliasing turned off by default. To turn it on, be sure to call setAntiAlias(true).

A fast way to place an SVG element on your form:

Updating the SVG document

SVG Salamander parallels the DOM model internally, and can be interactively updated at runtime. That is, you can change colors, positions and other aspects of a loaded SVGDiagram.

Tree Navigation

Use SVGDiagram.getRoot() to get an instance of SVGRoot. The SVGRoot coresponds to the <SVG> element of an SVG document. You can then get a list of it's children by calling SVGRoot.getChildren(null). The tree can be further navigated at deeper depths by calling the getChildren() method.

Adding and Editing Attributes

SVG Salamander stores attributes as strings and parses them into values at runtime to draw the SVG elements. This allows for the rich variety of types of values that the SVG specification defines. Attributes can also be either style attribtes or presentation attributes. Style attributes are defined in the 'style' attribute of an SVG element. Presentation attributes are the attributes defined as attributes outside of the 'style' attribute. If both style and presentation attributes are present, the style attribute overrides the presentation attribute. For example:

<ellipse id="myCircle" style="fill:red; stroke:black; stroke-width:5;" cx="30" cy="80" rx="10" ry="20"/>

In the above, the style attributes are fill, stroke and stroke-width while the presentation attributes are cx, cy, rx and ry.

SVG Salamander distinguishes between the two types of attributes by using the AnimationElement.AT_CSS and AnimationElement.AT_XML constants. AnimationElement.AT_CSS represents style attributes, and AnimationElement.AT_XML represents presentation attributes. If both style and presentation attributes exist for the same attribute name, the style attribute takes precedence.

To check if an attribute is defined

svgElement.hasAttribute("x", AnimationElement.AT_XML);

To add a new attribute attribute, call your element with the name of the attribute, a constant representing whether this attribute should be a style or presentation attribute, and a valid string representing the value of this attribute. If this attribute is already defined, this will throw a RuntimeException, so make sure to call hasAttribute() first if you're not sure if this attribute exists. The following adds a new style attribute to the given SVG element:

svgElement.addAttribute("fill-opacity", AnimationElement.AT_CSS, "0.5");

To setting an attribute, call the set function with the string representation of the value to set the attribute to. Make sure that the element already exists, or this will throw an exception:

svgElement.setAttribute("x", AnimationElement.AT_XML, "0.5");

Sometimes after setting an attribute, it will be necessary to take an animation step to update the element to reflect it's current state. For example, after setting the 'r' attribute of a circle, it will be necessary to call updateTime(timeInSeconds) on the circle or on one of the circle's ancestors to update the circle's shape. If your SVG diagram isn't using animation, you can pass any value in as the time. Not all attributes will require updateTime() to be called, but calling this will not hurt. Typically, atributes that alter shape will require an update while attributes that alter fills and colors do not. For convenience, you might want to update all the elements in a diagram, and then call svgDiagram.updateTime() to update the entire document at once.

circle.setAttribute("r", AnimationElement.AT_XML, "10");
circle.updateTime(0f);

At the moment, you can only set the text of tspan elements. You can do this by calling setText() on the tspan element. After doing this, you need to call rebuild() on the text element that contains the tspan element to update the caching data.

To get the value of an attribute, you can create an empty attribute and pass it to getStyle(). This will overwrite the value in the passed style attribute with the element's value of the attribute.

StyleAttribute attrib = new StyleAttribute();
svgElement.getStyle("fill", attrib);
double value = attrib.getDoubleValue();

Note that getting the value of a style attribute will first check to see if this attribute has a style set. If not, it checks to find the closest ancestor that may have this style set. If no ancestor has this attribute set, it then checks to see if a presentation attribute with the same name is set on this element. This is in keeping with the SVG convetion that style attributes override first ancestors and then presentation attributes. To get the value of only the style attribute of this element, call getStyleAbsolute() instead. getPresAbsolute() will check for the local presentation attribute.

Adding and removing children

To add a new element, create an instance of the element you wish to add, set it's attributes, and then add it to it's parent elemnt in the scene graph:

SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri);
Group group = (Group)diagram.getElement("parentGroup");

Circle circle = new Circle();
try
{
circle.addAttribute("cx", AnimationElement.AT_XML, "80");
circle.addAttribute("cy", AnimationElement.AT_XML, "80");
circle.addAttribute("r", AnimationElement.AT_XML, "10");

group.loaderAddChild(null, circle);
//Update animation state for group and it's decendants so that it reflects new animation values.
// We could also call diagram.update(0.0) or SVGCache.getSVGUniverse().update(). Note that calling
// circle.update(0.0) won't display anything since even though it will update the circle's state,
// it won't update the parent group's state.
group.updateTime(0.0);
}
catch (SVGException e)
{
e.printStackTrace();
}

To remove an element, call removeChild() on an element capable of having children:

SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri);
Group group = (Group)diagram.getElement("circleGroup");
Circle circle = (Circle)diagram.getElement("circleToRemove");

try
{
group.removeChild(circle);
}
catch (SVGException e)
{
e.printStackTrace();
}

Picking

To pick shapes within an SVGDiagram, use the pick() method.

SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri);
Point pickPoint = new Point(20, 80);
Vector pickedElements = diagram.pick(pickPoint, null);

The pick method will return a vector of vectors of SVGElements. Each vector contains the path from the root of the diagram to the picked RenderableElement.

Ant Task

The SVG Salamander Ant task allows you to easily convert SVG documents to images from an Ant script. To use it, include the SVGSalamander.jar in your class path and write an Ant target similar to:

    <target name="testAntTask">
        <typedef name="SVGToImage" classname="com.kitfox.svg.app.ant.SVGToImageAntTask" classpath="www/binaries/svgSalamander.jar"/>

        <SVGToImage format="png" antiAlias="false" verbose="true">
            <fileset dir="examples">
                <include name="hinorei.svg"/>
            </fileset>
        </SVGToImage>
    </target>
Parameters:

Examples

Some example SVG files that can be loaded and played in this browser can be found in the /examples directory of the source.

Here's some example code that demonstrates the use of the SVGSalamander package: svgsalamander-0~svn95.orig/www/docs/exampleCode/0000755000175000017500000000000011562044223020607 5ustar moonmoonsvgsalamander-0~svn95.orig/www/docs/exampleCode/SVGIODemo.html0000644000175000017500000000736211417443444023210 0ustar moonmoon Dynamic SVGIcon demo

Dynamic SVGIcon demo

This is a minimal program which demonstrates a correct way to create SVG Icons and render them to the screen. This particular example generates the SVG document dynamically. You can also load SVG documents from file.

This example can be found in the SVG Salamnder source.


package com.kitfox.svg.example;

import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;

import com.kitfox.svg.*;
import com.kitfox.svg.app.beans.*;


class IconPanel extends JPanel
{
    public static final long serialVersionUID = 0;
    
    final SVGIcon icon;
    
    
    public IconPanel()
    {
        StringReader reader = new StringReader(makeDynamicSVG());
        URI uri = SVGCache.getSVGUniverse().loadSVG(reader, "myImage"); 
        icon = new SVGIcon();
        icon.setSvgURI(uri);
        
        setPreferredSize(new Dimension(400, 400));
    }
    
    public void paintComponent(Graphics g)
    {
        final int width = getWidth();
        final int height = getHeight();
        
        g.setColor(getBackground());
        g.fillRect(0, 0, width, height);
        
        icon.paintIcon(this, g, 0, 0);
    }
    
    private String makeDynamicSVG()
    {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        
        pw.println("<svg width=\"400\" height=\"400\" style=\"fill:none;stroke-width:4\">");
        pw.println("    <circle cx=\"200\" cy=\"200\" r=\"200\" style=\"stroke:blue\"/>");
        pw.println("    <circle cx=\"140\" cy=\"140\" r=\"40\" style=\"stroke:red\"/>");
        pw.println("    <circle cx=\"260\" cy=\"140\" r=\"40\" style=\"stroke:red\"/>");
        pw.println("    <polyline points=\"100 300 150 340 250 240 300 300\" style=\"stroke:red\"/>");
        pw.println("</svg>");
        
        pw.close();
        return sw.toString();
    }
}

/**
 *
 * @author  kitfox
 */
public class SVGIODemoFrame extends javax.swing.JFrame
{
    public static final long serialVersionUID = 0;
    
    IconPanel panel = new IconPanel();
    
    /** Creates new form SVGIconDemo */
    public SVGIODemoFrame()
    {
        initComponents();

        this.getContentPane().add(panel, BorderLayout.CENTER);
        
        pack();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents()
    {

        setLayout(new java.awt.BorderLayout());

    }
    
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new SVGIODemoFrame().setVisible(true);
            }
        });
    }
    
}
svgsalamander-0~svn95.orig/www/docs/exampleCode/SVGIconDemo.html0000644000175000017500000003712111417443444023565 0ustar moonmoon Dynamic SVGIcon demo

Dynamic SVGIcon demo

This is a minimal program which demonstrates a correct way to create SVG Icons and render them to the screen. This particular example generates the SVG document dynamically. You can also load SVG documents from file.

This demonstrates simple user interaction with an SVGDiagram. You can create and remove diagram elements, as well as alter diagram attributes.

This example can be found in the SVG Salamnder source.

package com.kitfox.svg.example;

import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;

import com.kitfox.svg.*;
import com.kitfox.svg.animation.*;
import com.kitfox.svg.app.beans.*;


class DynamicIconPanel extends JPanel
{
    public static final long serialVersionUID = 0;
    
    final SVGIcon icon;
    URI uri;
    
    LinkedList extraElements = new LinkedList();
    
    public DynamicIconPanel()
    {
        StringReader reader = new StringReader(makeDynamicSVG());
        uri = SVGCache.getSVGUniverse().loadSVG(reader, "myImage"); 
        icon = new SVGIcon();
        icon.setAntiAlias(true);
        icon.setSvgURI(uri);
        
        setPreferredSize(new Dimension(400, 400));
    }
    
    public void paintComponent(Graphics g)
    {
        final int width = getWidth();
        final int height = getHeight();
        
        g.setColor(getBackground());
        g.fillRect(0, 0, width, height);
        
        icon.paintIcon(this, g, 0, 0);
    }
    
    private String makeDynamicSVG()
    {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        
        pw.println("<svg width=\"400\" height=\"400\" style=\"fill:none;stroke-width:16\">");
        pw.println("    <circle id=\"bigCircle\" cx=\"200\" cy=\"200\" r=\"200\" style=\"stroke:blue\"/>");
        pw.println("    <g id=\"extraElementGroup\" style=\"stroke-width:4;fill:green\"/>");
        pw.println("    <text id=\"userTextParent\" x=\"0\" y=\"40\" style=\"font-size:40;stroke:none;fill:red\">");
        pw.println("        <tspan id=\"userText\">Hello!</tspan>");
        pw.println("    </text>");
        pw.println("</svg>");
        
        pw.close();
        return sw.toString();
    }
    
    public void setCircleForeground(Color color)
    {
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Circle circle = (Circle)diagram.getElement("bigCircle");
        
        String colorStrn = Integer.toHexString(color.getRGB() & 0xffffff);
        try
        {
            if (!circle.hasAttribute("stroke", AnimationElement.AT_CSS))
            {
                circle.addAttribute("stroke", AnimationElement.AT_CSS, "#" + colorStrn);
            }
            else
            {
                circle.setAttribute("stroke", AnimationElement.AT_CSS, "#" + colorStrn);
            }
        }
        catch (SVGElementException e)
        {
            e.printStackTrace();
        }
    }
    
    public void setCircleBackground(Color color)
    {
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Circle circle = (Circle)diagram.getElement("bigCircle");
        
        String colorStrn = Integer.toHexString(color.getRGB() & 0xffffff);
        try
        {
            if (!circle.hasAttribute("fill", AnimationElement.AT_CSS))
            {
                circle.addAttribute("fill", AnimationElement.AT_CSS, "#" + colorStrn);
            }
            else
            {
                circle.setAttribute("fill", AnimationElement.AT_CSS, "#" + colorStrn);
            }
        }
        catch (SVGElementException e)
        {
            e.printStackTrace();
        }
    }
    
    public void setText(String text)
    {
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Tspan tspan = (Tspan)diagram.getElement("userText");
        
        tspan.setText(text);
        
        Text textEle = (Text)diagram.getElement("userTextParent");
        
        try
        {
            textEle.rebuild();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    public void addCircle()
    {
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Group group = (Group)diagram.getElement("extraElementGroup");
        
        Circle circle = new Circle();
        try
        {
            int cx = (int)(Math.random() * 400);
            int cy = (int)(Math.random() * 400);
            
            circle.addAttribute("cx", AnimationElement.AT_XML, "" + cx);
            circle.addAttribute("cy", AnimationElement.AT_XML, "" + cy);
            circle.addAttribute("r", AnimationElement.AT_XML, "10");
            
            group.loaderAddChild(null, circle);
            
            //Update animation state or group and it's decendants so that it reflects new animation values.
            // We could also call diagram.update(0.0) or SVGCache.getSVGUniverse().update().  Note that calling
            // circle.update(0.0) won't display anything since even though it will update the circle's state,
            // it won't update the parent group's state.
            group.updateTime(0.0);
            
            //Keep track of circles so we can remove them later
            extraElements.add(circle);
        }
        catch (SVGException e)
        {
            e.printStackTrace();
        }
        
    }
    
    public void addText()
    {
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Group group = (Group)diagram.getElement("extraElementGroup");
        
        Text text = new Text();
        try
        {
            int x = (int)(Math.random() * 300) + 50;
            int y = (int)(Math.random() * 300) + 50;
            
            text.addAttribute("x", AnimationElement.AT_XML, "" + x);
            text.addAttribute("y", AnimationElement.AT_XML, "" + y);
            text.addAttribute("font-size", AnimationElement.AT_CSS, "12");
            
//            text.appendText("text");
            
            Tspan tspan = new Tspan();
            tspan.setText("text");
            text.appendTspan(tspan);
            
            group.loaderAddChild(null, text);
            text.build();
            
            //Update animation state or group and it's decendants so that it reflects new animation values.
            // We could also call diagram.update(0.0) or SVGCache.getSVGUniverse().update().  Note that calling
            // circle.update(0.0) won't display anything since even though it will update the circle's state,
            // it won't update the parent group's state.
            group.updateTime(0.0);
            
            //Keep track of circles so we can remove them later
            extraElements.add(text);
        }
        catch (SVGException e)
        {
            e.printStackTrace();
        }
        
    }
    
    public void removeElement()
    {
        int size = extraElements.size();
        if (size == 0) return;
        
        int idx = (int)(Math.random() * size);
        ShapeElement shapeElement = (ShapeElement)extraElements.remove(idx);
        
        SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram(uri); 
        Group group = (Group)diagram.getElement("extraElementGroup");
        
        try
        {
            group.removeChild(shapeElement);
        }
        catch (SVGException e)
        {
            e.printStackTrace();
        }
            
    }
}

/**
 *
 * @author  kitfox
 */
public class SVGIconDemoFrame extends javax.swing.JFrame
{
    public static final long serialVersionUID = 0;
    
    DynamicIconPanel panel = new DynamicIconPanel();
    
    /** Creates new form SVGIconDemo */
    public SVGIconDemoFrame()
    {
        initComponents();

        panel_display.add(panel, BorderLayout.CENTER);
        
        pack();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents()
    {
        panel_display = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        bn_back = new javax.swing.JButton();
        bn_front = new javax.swing.JButton();
        bn_add = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        bn_remove = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        text_userText = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        panel_display.setLayout(new java.awt.BorderLayout());

        getContentPane().add(panel_display, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS));

        bn_back.setText("Background");
        bn_back.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                bn_backActionPerformed(evt);
            }
        });

        jPanel3.add(bn_back);

        bn_front.setText("Foreground");
        bn_front.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                bn_frontActionPerformed(evt);
            }
        });

        jPanel3.add(bn_front);

        bn_add.setText("Add Circle");
        bn_add.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                bn_addActionPerformed(evt);
            }
        });

        jPanel3.add(bn_add);

        jButton1.setText("Add Text");
        jButton1.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                jButton1ActionPerformed(evt);
            }
        });

        jPanel3.add(jButton1);

        bn_remove.setText("Remove");
        bn_remove.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                bn_removeActionPerformed(evt);
            }
        });

        jPanel3.add(bn_remove);

        jPanel2.add(jPanel3);

        jLabel1.setText("Text");
        jPanel1.add(jLabel1);

        text_userText.setText("Hello!");
        text_userText.setPreferredSize(new java.awt.Dimension(200, 20));
        text_userText.addActionListener(new java.awt.event.ActionListener()
        {
            public void actionPerformed(java.awt.event.ActionEvent evt)
            {
                text_userTextActionPerformed(evt);
            }
        });

        jPanel1.add(text_userText);

        jPanel2.add(jPanel1);

        getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                         
    {                                             
        panel.addText();
        repaint();
    }                                        

    private void text_userTextActionPerformed(java.awt.event.ActionEvent evt)                                              
    {                                                  
        panel.setText(text_userText.getText());
        repaint();
    }                                             

    private void bn_removeActionPerformed(java.awt.event.ActionEvent evt)                                          
    {                                              
        panel.removeElement();
        repaint();
    }                                         

    private void bn_addActionPerformed(java.awt.event.ActionEvent evt)                                       
    {                                           
        panel.addCircle();
        repaint();
    }                                      

    private void bn_frontActionPerformed(java.awt.event.ActionEvent evt)                                         
    {                                             
        panel.setCircleForeground(new Color((float)Math.random(), (float)Math.random(), (float)Math.random()));
        repaint();
    }                                        

    private void bn_backActionPerformed(java.awt.event.ActionEvent evt)                                        
    {                                            
        panel.setCircleBackground(new Color((float)Math.random(), (float)Math.random(), (float)Math.random()));
        repaint();        
    }                                       
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new SVGIconDemoFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton bn_add;
    private javax.swing.JButton bn_back;
    private javax.swing.JButton bn_front;
    private javax.swing.JButton bn_remove;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel panel_display;
    private javax.swing.JTextField text_userText;
    // End of variables declaration                   
    
}
    
svgsalamander-0~svn95.orig/www/docs/exampleCode/svgIODemoScreenShot.png0000644000175000017500000002173410607673157025173 0ustar moonmoonPNG  IHDRrsRGBgAMA a cHRMz&u0`:pQ<#ZIDATx^mEuo~&4DW^7PJWڥiR XA{W,h1{IQ#?M=Yk{y>=]k3{ߺa  %p!۶8m 666nzȜh@dPO`~.ŷNfo}~vnwowσoCnCе{\\vϵ~l?Grm_>ص!zf{1ÏÏiqw;~ߺkܸk[7vzN{'ڣFXtǹ{>޵v'ŵ<魮ɮ|vztN<͵=tlxs\;u{f{l/8{W<{=msv_x#\{;ڋ{sQ///1"]{+\t'ٞ\{ҫړ_ڻk~]nn^t|3~3yϳy^g=ǵC\{l/8ljmWy{ ];/rk^q}ܵ{>_{kyk'|Ե^>7WiO>ګڧ_V>ɛmS>\;sOA}ӿp_\_ӯ~xu?:#?zkkg}'q~z'\ٹl];ӿpϸ|ֵsE}/v틿ĵ//u˿~k_w߼۵t 7]qoo o1Ld? !2DYEň]8q"D{8],\r _m8q"DfD ?Y,Ua"Y/z &"Cd F>6/J"G g]tջ2vw"Cd" 8@|"sŅ~|ّ\z$"]K޵][Y4y%-2oEK:쒣gOqɉ'2Nds'|D{ㄉl}ot#{:t6'.ڎ3"Cd ee 6 3 o)V.Cd !L" D6jesv"Cd9D3p"Odpp!2DfZd˟X>+?ȡl8bk !2DOƆ=#fD6< s:84nƣ?~1I_\& p@ϔq"DƉ̹+JDqį(WD9973|F?t O#[lWNd|G5β_ENd8;5kE6|DX 77ݴev,AX{"N;?sY/3=;tFd}URRCdА摗p@j@!|()s}q,Å 2#IݺF xRLtt6_H RdF}pHj?"ӔG]iUbbTȂտs> /_ܔf2B9 D&1YL 4"kqjd4 L"k6FDE0Q("vB.mc:I4߆{YiIc#)īG#w(tV p"Aՠ,u_!3,d,_=S EsJpK<.UQ({,?X5?S[#R!r"@sҴ>Ւ1È,uEgtFKɒ[DZ0.CtC%%DaIYtE Ht\$8.""k /uˆjƋ Й?kUI@NT 2,eV9QdR뼔Y~J"ȫ fHۛrE& H۞BE&  ,I D2"C'2\n٭D&K7uB!J`~Ϧ{h. z$>dLzg&X!| YsVu@WRhv9 I tAqDbE^n/V+Y@_"kʊB::m&@i)-4TDVyT P@=.Bd2 P@emDVSu,2j;Ȫ‚s(k, (Jꬪhb"Pa׷Y :Cz *ҋћf"meDVz%A@;6"ӞB =TY5? Є@94Yz'ݾ|Ի&ùB75DV(:[/l¹r ʊPܕי.Z9TUȟmsTdSUdmI֚_2ұ4a񳻬8MgkMar؈1U_2 uXcpIv3Y Zc=0>KPJ;Yf ,o2s3ZHаW] r:=!ڙm[fM|p.8ugR"b*-I 4,ƒPe\>l\j1sx,Wp5VUJdHfT)s]Pred8‹Xxxs3˹'r)6;V.WpHkcYZ]yƓeEﮑLEyd-~(,,rU!lu+ [)r3EVn*FVZ aG g90PSdZY>JwdpQJdAkYݹF1-흔CY6% R>T.EOli׸8Ȍ ZꛝsY \r)eyDh0#y-c -0Kk ]BhYJT_n".Gl`qkl9qfW2,Z x"QE! \h%!Mp1D,skl87OA!VwJpn˿VI=Eʳ\[M*D'S$Y(B($xg_'" s ?! F5@OtwI'2D29k}_)kJw KBYz U2P:Y$"vN*2P;YL9dO;zluȸmS7HWsH)Am8uruqAdUU5\léSK$LdWΣ."Jl2DyKM뻪m8uJjx}&1Nt.ԩ%~}WSDd>NFfCW5p _]-vOd#eOW5p _]-vDc\gz'ܝt.+zwYszݺm8ujx'n]\6:2.jd+wUs pjϝ[WVDdsЭk؆S/we&8RϮjbN]\Z?^D*gW5p  Z? ":J'`T=Hff=;rFl8̵عֹj5VdneDdqܼ$U;%d!a^ kCK1eu.r c;_`4م+un`^5 fOV/H9m%VkH3V gςmo-y@Y6gؓݤKZ<=;X]-K l sw9g* Mmf+=)+*zmȸ ͇=&y-cfBq ++Yte8E U4oDJg)sObw9w5jdKSPNu5vR Tj .8W*ha z Qǔ\ 2'fMtE;]6q |^PcZ"4hZ-qˈę^F@d bv)?B_}8jBrK-4O"9PB#YtܠMڀ_ZfY,%2OP"D>/ rl,2!q JTX:p.M3(N<]QtAW^xPDu2SAyGd2]74Ob 1?"KWZ]O z( M#t-Šfsau:g:%z>ƳO륈ߓO7w-б2-G$E gI+ " Xtd@d2BT@DLLf^  `I QAY,B2 2y!*@ " EW@@&D&3/D@d $d慨 ,]!̼ @+ "x,`߼4F,b xFȚ(j1K(lב'J,e oNFLtobjj6y[X2" eOfCb@8}c5&ߖ@{2 X[˅KeY] ]^ƛ! eOd,{K}X. =<,~!ϊ\}ʑr~k 2{7=NnQ,6(_QDZJ"3|([Kpnb<6Bk#2󇲮\ڪA%n*+=쟁.'c h$ԞXB.{sPub( +~\DBEcD 7,m"3y( et=_U8D6d%1a1 E.:en3ʛe ǚ9xdY1]5Ia1Zk)C.\ga1OPt[ Б:tMX =l'Q75Q*fbB7?l}Y7*c1)&G6h{;].A#=aH,JͰXlWDd J+˰QDZrY\d+BAt v.[D %^`ba2-D&]LX?Xob&fb1)BfVpk9U2Utc19ݧId&o33ʋn1MV U&o1"\6y.c1Z(3"2!d\aD0>~ u/*; NbOdC1)Eou'.n%'2\w(z-fDDH@L{L%n1k"ev1"`2#Kˋ@z ذn*"I.K#c3{"ՖB2 س}-?Y[D:LZ Vf, XX/"e&`b '/m%2\&y[! 3-f?~,:k]?ѝȆ`]h3;.˸aJo;J|| mOQ]z>_t/1x+s'YuVyvr!"Fu}_1`M#[Qs1W:^lpYb:*%<#t慉N PȹhV}#2a, Ï<#.(Jg= 6W 3/Lt*C&Kb, <)"2OPtx;/?+f1&Y(1tO+' ID+; 8ni&q. DnhƧ{2fbFdY6}²e8q,'e+cDda0MNaEEb-EVD!rl7GvU2:eP:Q4atV9PX :Y=BfBa5jҞzk'|( ױQY}:hm6눿Hh4r=K/G>$1#Y4rҬ5YEzzD6ͨZɍZ.F&L {I8[E`V&Lì!𧧞eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FW)IDATx\[?IN @T6f5EDe--[RɄWfovW]-e+6X騣*4(]ԡhG-(em@Nr|HHsraH99syy?N>)rۊU ]yBeݓobDb?q\ٖ@@8>}-" >|ۺ߮la/qݫ=;m rYߜ]H0Ǹ.7ֿ|Mn'W#ZXpC: vqF. N]HY™"쟭V빏/X, d)w~kevWk- 7~C\*NװlFd]vMl7Do!'89 p[ޕtl 4myNl6ٌ3 rʄi1rfrMfbZ(L&6A'8e&]Z,;oTY}r7j&XY J=vn_~A~6Ai2]OKy!Di0X'tl.d0䚥zfEaqlXh:,u}A7X4MzEL1>66655k|gbbl6M`Qp hr1Ҵ݇nX~)H,M~w, smauorESsOg'].;OlF1-nQFI(.@ Z#q,9RV~"yI( F\{JicuqVgZyl(E"hX,oL!śRBCCBlF" `eЬn(J ~2:v2?Y/ )Bb +۞]Yk>A>y:)ۗ&޾to<=> Yv.Z Go\peÄ#lsu]CY#4_ߌ@?C\LJJ[hYmǹݺ1!DL\$)tX@ ^{zeѣ0OdU2׬ad2%ugft?F{V[z_tMN7)Õewߔ'lXx(uX \ȈQ((lNK3TfŠg+E]E'kY@7iɹ-rm%%1H::==Zu+ C:;ŝBϤMPvAv5wn#!*:)nh>-i㞧˃,6Ѱ3hjTs.M`ND}}!$9ټqŸ'h ]z1۵_/6 ϞjV7dmmb%hd"߲EMa@YPgЍ>hst[nH> hmaVKw Hǹn+;lQwڲE/ߵ+hd*  CVvv1 1Ws:z訷U(DG[Jkt?zXKd/mJmJM) /?<,wDA C50 ** )- ޼#F!1R55Vw+XRiKT5:my ]~'{{?:s`+8b=hn_.ܖ`t4駯~ZE𻯢+A|Kt#ݿygle i:N߾cCUUib:QQքf .>j<|Қy9QAo/5<,7pY ij܌[.8Od 4vAO\t%.I/8&jioWDDVdVb,{u#"l*y/z{EvZNNhBe an raETn$-.xxT##qq$Je PLfKH`aV+>~t:{OC=l#!2U5QlCѕJZ4؃+Euj)`E| kn.KŽM!LRn_(/OVUYt琊ewebVeJvv+*<`&'WbӑBܷmm|jŃ~ dAEEF N鹱N.}ky_C<k>-@?tsztJJ.f nK˧  R⌦gߚ]\6F{3JU1j4DJZZ==sRa*l3.iN'pbzRiJISu9^&K/Bȧ5$\r)|pw^cc-6wr-'ɡGGZ!\ZSKQSҚq[?MYޘe55' ss;~ys "RbMA@_KwQQNO7lSvidDoaǶ3 65I >JK,pwC$--OⶶTY^ތF'U?ڕtthBD&s0z}&_Zlͥ;;z{۷'2Һ}kkL1:J,4;[[%@ݸu|cbn ^0Iss偹wmr%: Ϝؿ47ǛyIvh%7,! !$cSR̈"ur=K\Yx~aƍɈX`6vFG?7]B1ג֨(Ju.ΎDmȹEDퟗ_|f IJeomW~Eru>qx\--ys3&K' XTjIg>$(}$'KZZ!AJP&9y~g_Ϸ+Heɒ(EƘeV a 55A55^ťS ӂ.tQϞ^v{o튠N\ZLk4;!AAH*\y>H (?LQT^VZW']N=j t^~sK{Uk?2",) ni)a)9G|:cIGpCٝ͛M dY߾ݸm]YT_/5x -mۨ)>:BN*:;IIaNdq3arxꔾbjY/-z1Ƹ;X-/(>ByjW~&=aΝw9}\IBQ$3TR2|BCDFZKKnw v҆paVVFc,.6Z}љ^bhf\l_Qa avȈpV٬eOժn咒b@<0'JSEE!^4aB/rQϝUMoA346׉H^#_#٠Fc= VXڱ ^v &qaB9^6;Ba=thE(RT4ţEE}E))ώpզd́tuegxtwSII<{TZZ"jj uul^Lf6xyqnxMP5Z8++ttXc&o&#t/FF7: R(3ގ(](д ''^Q{]C\(k,HUdC?maaHEE0F**˃]WsªՎ.QjSG?oA 2. n8"}qq|KgXf&FA2h:M0 ٺUw/cM rưcMMPTgCd--;KJ ۍLnA!>摑mdd]o&~4{X k9rd<6ՙVcN jȠ4 k{JjV֭#F#s/bN}A 'msյ& xB8u5߾XU5W|"Gyya8FsΧ<1ٹ3@^wyEMpg-[LA//:Ol'9{;W ECl,Lj^ --ήHkc#<d2ہ 66J]o ZGF%%'&CR+ݼ"d GBL[Awu^Y9n%n^8΁pu^P`DgBHTn+&-Indd8!2?ݕsW'?CLuM۵JT}13m]DuPX++')/$"I.cVe( \b "JKJND(Aj:|0ρFz`8^BеZqK 襺:C|.kgfjN\~#*ÕlOb"GKy9NJO`2Hg}J"#%%p'LEFv;1;5>4$RZ^>g ~\n+/bK^ZLӬD5[322L"HAӰǮb?kb5ς\ʶdfbb,z B0=,蝝nU܆P.c==zR˹s`sଠt\C33M 4\]%CCBޢR\E`!F. CNӂz#{ (\][BI¡kVzq#6qT ɈARp(kZk#Ar]| zw750Wa!/aRm`@Յ :4D&>OUp(E]rH&z1~N1zYcPccYϮ8Q>}>a mHU15겠P##2d2۶m404$QuM9D+nlP؝L,˹ G1<W-uiksHo>|lVL\W'_Ow2tytSp_/ y%~S\!cqw~Iy&L-gZ2[3?TÖ-M{>mq#66ZZF_=X7 ! r•+,ۉzUu/2V?ޑ١ WB6ڐs[NW~kYɗ&:Džд`Ŋpa'NJú3_xѣj-&Ws^4^ԼyK5z\(,R-3T].]#nfte9@yT^z=72Ɓс/`2Baaa?Dh /Y"2\yܗswB6鱸ʓ:`1/ƈH[:AɷK;PSnQkUTȍX}mtZwnem-B<2)VuwK1_~XaERݘN.-,4"<>9>):BSX2\Pger5zyDFZRqd! 8 +MQJeJEtWْf, e]̂RieՅt?=9La<oJҦ;#RԾp3 !Kso;yMop eWGGRBֲ&:v{FN'|0>>Ǎw׭݃V*(!ՕեɥrHuW3f,s:+W2:GF0/fR%\()WWiuӭ݌F̱'! WR+v2\iWs'𕯰s0:; aXMX :;A\v?}vfyh*ߎX(DFN[hYmǹݺ1NL\$)tX/!"&hEխ?DFBihj_/<4KݘtS&eq#%zUiAQu E]EYf eig(oW6O;ЋjO:d㻍-č7VvP}Bמ:Mo Bw'bk^l0p;Yh-rV}4_{V;|.tc:x.aX1:x1Nxt_*hn^~^<"d2x]tuBC\~^V||^ԩGt˿(``,v°h^@ CB_1L<ŋ3c ؉H }!l].6]$ N z7x @= o= K nZ.mt¨(+./<mg:wte2qIbҒeb2goDD@\:C{V[z/YcMMʲoJpA|\̋)gPʞӖߙX7 A_, Լd3K6HJcg;# w=uRA{ QAp+.~Zůh7n6i{Hg+;Н!*N:up[cB >DG[ N0[> l{x? A':EmسܹW"ۮ.9s7Ncb,Tۜ,4 e+z|*.)'NH\^vr AG($ui*$ qNGGt܆j*(k)Õ~PktTptn^ew]2?(BQ$6. 7鹱/}keoJm`؍ɓTtRӳoͮH>u3 >=q|߆x)~ЧrmeԢ2ۘ:"胃"^ x~GLF&@Z YEйəla>9T6~BElcFINRs6#hL'AM̋o!+lE&.9WAg "> [v:WA<%BA.V'+3. #tyځQ.> [ՈvMGFCCpxfxXve]tBHkcAAӂnvt:p.G_"fg&ΏEK 7K88r›O/ajeEch}hHx,ҁ ̆>` :cbh W67Vk &g¸ ~H 0TCmbd5!>y}zK<:*@!y Fͭ_P˸/㩩}R--HDkmŽ߲Tf7:EAg'#E֬e!AJm*;#q1j`tuhr%stBHJ à;Zm(p TáCp8A@:W @==.9BEg V`I zF ^ Xd# mQ?;݈CG Nb ܿ_8ρ}Z9ĺH$4-hnF|[]-M9:*@U)@BHr.NٰA:)88i32`s7-Maj"2MF| WAJm<^Qz֖_n.s=!ڜ @(`ZZX}іի@wM ! k# *th^D<J: _t8 fCE!'Av]UVadWsg0UT*Bs>u+k V$3 sXnrcb,'܌}$_\A46lt(߂mb5Jӂ:xW b(PAJm994'En԰67o6!;A jj`Hm-k1t"JCe) 3Xii(D+.Bh'18Aì ;Xr|<:> s FFJqqSNj YhZPU#Zʡ9e~>/))D֏ztNX[DO٢PXw Tj䶮F# p?@q QtBHJ93\N',,D:|n]32L))I;Nxii ^4"†-'rmN-??DC47g3L* 5A'&n"/dmK6eg#7RR2eꣿ_g:^HQQK2_tZ]mns*%Rn3ɭA'Tfc֭>+s|oͥ/R\l6 0$''xaNN(Q.!]*q.0<,D}]D:<,LI EzJmuuCН"1ih0O`&u†] (y AwJp:!ddD#f1-t$3Jp:,^ tu0ssi & ۷\c0rrB8 iil$oXTsKTNKÐOAyyܫnv@ !j2#]ChHA0(4Ůݻ H CMbR+Cry]$Rn iG VP(^Sà z{aolj̮ZmڳgjAjM!%mm4W !gDh="PZg~stwhz]XF;p.sFF7`dg'tQU5bΑ|Pg'IFD(B=@QԎS_yB*UK"b%%SPsgؾXVC![\ϦاddWTVN"am'xont:ނR[cnAн|DD/Z:Y~xI<8t/"1io!M d["x#@=h$nt#:9ϥ*Y: ԁC%'75;6Nrt/E.NnZRRqTTX(#tK }ѡ(RU5K8uº< +{";vL;?2"ܺUVi@08( ݲVSc(-BDb>vln*99\L84-^.Ihˑ#㙙pC߂ C$VKQ-pM|AQegA(RY9YWg+ю^/(, ING:`:Jࠨ(juX}nftT$ٸ1tŊ~w9E\7 Ps }qmee?l,- nogMuwSEEdjsZ9#ôy^/hk:$j$*t Aw+QQֆC_CVaHWK\TlNNf˖Y(C>;:G[ !LyT|<CYZ[ǵZΝ}}nô+{iipT59٬VDAo-:rD*YB,,o#KkB2rRj fA<*Y2KK=PehH84$RIH`֭3զ(LcMN/o/|y9l0)+(*ԉVz䛄r9F3 C%55Ҟ?&##qqu*>")>~Z2Gʹ-rm%%_ۺ3_xѣ{١ZmRMj+pZV+.*"xf*&.PnA00 zm;Pg;愐w !U)UK*!PUUAZس;3:*jŎ݈ye frktşh Nt:S'ӧ_rR45&^HH`&z{ikK +EMM 5.΢PXoݲlerO$1Ѵٳ>'D:лRFbRkkdbnAF㙺:Fڿ_Z_/.JEbb, 5&/[kՌ?XG /CCBַ3YP'Ѝ>h˼%7{/JuǎBcSN:0uZE3ERm U* kh(:+!$(8\zqp Ep@\(QwNcectAR[n.KwwS>&iN'@g%TMscdFwc$ݗHLd't:}$>jі<:% Qݘۦ8Aq.büu<#LfKO7:4qXn.  v`|EC.Sq)-m*ip%7[[?{٦lP/uOV˜ ƥwV !>yƐq;KI|YAq!*låR%xgh2B˗pG>whK w,tYX‡I/ \Z :.5=g:2 :arecqv}qia( AW-Wg|n]a\Z na7LIB!EQS7x#-;Aw8Ǎ-O?$`e_:ڵ~5\\W)~TjNV*X|۟|ꦛoB7!X?+~ nR +A?y?=W69?ܵ*տ֎' ?_z:y5DHI3#T\O(R˅KZ_%tۅ V{bQ粇wY6M11=_tl?zbTetٛsWֺՄ;\51>^ZBHmMum6;}B˼r%8?}cw_?+8:W1t0ס9jTR+!o>H$_vkfoBFwo]/!d=7ڄ_O?ϕݺyY{~WoZ5%ue4883{G{y{{7j3'v}oЧ5ϡ9Cݡ\(%A!ٛ}^7!wz8m_w=9NQܸt~C1\sOY| Ѭ1nxqj9nBW_?NBn<'24OlnGdo\}-޷z>:P|zX,ꝿεqt"D5&)EeXwwyɿB._hXuB啮?WGF'f_ !LZw7%;E"b}f!hk={ {P* "\|׬F[=.1lykCsBVNDΎW6>ŧǍMLN;;6|Kaam0!+1JxDiͺws uѨXrYg].,~\8"dn"KxpKpp0!Yo_U~e˶tB9شoI 涣ޞ_7Ҵbb~}k?c BXWmeaq꜏1f,&F^~~Y}znmB<~,3}ӧw7gw{zx׹CʥQnFyv=QB`pVo$Q/4Xz|#[gۧU湒:5ۓ!ZH1Mgnz6cj &i{?:YW_?zZ$GP(\ofYB_pYN@((꫷}mۏ,V[ζϟq=i-gd#6wgO#u_ZxwC֖?{HK$W]= MM{ !LȲXm?ǚp^jyn807|ˇg?hxYy;_c8}YmbWwÚ',VOۭxr[-V[[ !63Yprٓ~UPPo?C J2P`ZyYw#}x֥7-kZBKǎh;c돞|~QE?.K\:P?ѓ=ɺʟy֛H&O#k\ <"8u=&!D\>vܸx~;O<[di%>wR=߾`gϡدF򕡸cܞ~yug!ϿѣGB睇T" oZN^cg;`؎_e^omqn[σAa(xtqRc@0pia(|Bћeyc^0t\jĄ P@q>~ofW'x Dx]Y1϶B~??ATT޽{VógϊD"a0u}1|}Qc[IENDB`svgsalamander-0~svn95.orig/www/secure.html0000644000175000017500000000317511524225604017615 0ustar moonmoon Secure SVGSalamander binaries

Binaries

Run the SVG Viewer (no animation)

Run the SVG Player (animation)

SVG URLs that will work in secure mode

Just run the program, select File/Load URL, and then cut and paste one of these URLs into the input box.

  • https://svgsalamander.dev.java.net/examples/svg/ainominako.svg
  • https://svgsalamander.dev.java.net/examples/svg/duck.svg
  • https://svgsalamander.dev.java.net/examples/svg/hinorei.svg
  • https://svgsalamander.dev.java.net/examples/svg/pormouth_smith.svg
  • https://svgsalamander.dev.java.net/examples/svg/ship_mid_deck.svg
  • https://svgsalamander.dev.java.net/examples/svg/simba.svg
svgsalamander-0~svn95.orig/www/index.html0000644000175000017500000002106011524225604017427 0ustar moonmoon SVG Salamander - SVG Parser and Player

SVG Salamander

SVG Salamander is an SVG engine for Java that's designed to be small, fast, and allow programmers to use it with a minimum of fuss. It's in particular targeted for making it easy to integrate SVG into Java games and making it much easier for artists to design 2D game content - from rich interactive menus to charts and graphcs to complex animations.

Features

  • Ant task to allow easy conversion from SVG to images from within Ant scripts
  • SVGIcon class greatly simplifies loading and drawing images to screen
  • A much smaller code foot print than Batik, and only one JAR file to include
  • Direct access to the scene graph tree. You can use Java commands to manipulate it directly.
  • An index of all named shapes in the SVG graph is easily accessible.
  • Picking shapes given (x, y) coordinates is possible, and can be used to implement graphical buttons selected by the mouse
  • Clip region sensitivity makes for fast rendering when only updating part of the image. This makes panning the camera quite efficient.
  • Easy rendering to any Graphics2D or BufferedImage. Unlike Batik, the SVG Salamander engine does not own the graphics context, so you can pass it whatever graphics context you like.
  • Internal and external links are implemented as URIs, which allows the engine to automatically import linked documents - even if they're stored on a remote server.
  • SVG can be read from an InputStream, so you can create documents dynamicly from an in-program XSLT transformation.

Status

In Progress

  • Animation is mostly implemented. You can use the player below to play SVG with animation elements.

Wish List

  • JavaScript support needs to be added. This will likely dovetail with adding support for relative times.
  • Filters need to be added.

Current status

SalamanderSVG is part of the Salamander project hosted on kitfox.com.

http://www.kitfox.com

I can be contacted at mark at kitfox dot com.

Binaries

These programs provide the ability to read SVG files from your hard drive or the internet. If you're worried about security, these restricted versions will not.

Run the SVG Viewer (no animation)

Run the SVG Player (animation)

License

SVG Salamander is avaible both under the LGPL and BSD licenses.

Downloads

Complete: Download complete SVG Salamander JAR

Tiny: Download unsigned JAR without resources

Documentation

Download Javadoc

How to use SVG Salamander in your program

Maven

SVG Salamander is available on Maven. Thanks to Willie Möller for putting this together for me. The following should be what you need to add SVG Salamander to your Maven project:

        <repository>
            <id>bitbucket.org</id>
            <name>Internal Maven2 Repository</name>
            <url>https://bitbucket.org/W1M0/maven/raw/tip/2/</url>
        </repository>
        

Participation

Please support the SVG Salamander project. I'm maintaining this code on my own, and any support I receive helps me make the project even better.

Currently, I'm not accepting any developers, but would be interested in any comments or questions about the code. Please sign up as an observer and subscribe to one of the mailing lists!

svgsalamander-0~svn95.orig/www/binaries/0000755000175000017500000000000011562044330017224 5ustar moonmoonsvgsalamander-0~svn95.orig/www/binaries/svgViewer.jnlp0000644000175000017500000000164710611460770022106 0ustar moonmoon SVG Salamander Viewer kitfox.com SVG Viewer Allows user to load and display (but not play or interact with) SVG images. svgsalamander-0~svn95.orig/www/binaries/svgPlayerSecure.jnlp0000644000175000017500000000152710611460770023245 0ustar moonmoon SVG Salamander Player kitfox.com SVG Player Allows user to load, display and play animated SVG images. svgsalamander-0~svn95.orig/www/binaries/svgSalamander.html0000644000175000017500000000262011524225604022704 0ustar moonmoon

SVG Viewer


This is a simple viewer that renders an SVG file onscreen.  It renders the default SVG image, and does not play any animations.

Launch with WebStart Download Executable JAR







svgsalamander-0~svn95.orig/www/binaries/svgViewerSecure.jnlp0000644000175000017500000000155010611460770023246 0ustar moonmoon SVG Salamander Viewer kitfox.com SVG Viewer Allows user to load and display (but not play or interact with) SVG images. svgsalamander-0~svn95.orig/www/binaries/svgPlayer.jnlp0000644000175000017500000000162610611460770022076 0ustar moonmoon SVG Salamander Player kitfox.com SVG Player Allows user to load, display and play animated SVG images. svgsalamander-0~svn95.orig/www/examples/0000755000175000017500000000000011562044230017245 5ustar moonmoonsvgsalamander-0~svn95.orig/www/examples/svg/0000755000175000017500000000000011562044231020045 5ustar moonmoonsvgsalamander-0~svn95.orig/www/examples/svg/pormouth_smith.svg0000644000175000017500000010702710607673157023674 0ustar moonmoon ]> svgsalamander-0~svn95.orig/www/examples/svg/ship_mid_deck.svg0000644000175000017500000005225310607673157023375 0ustar moonmoon ]> svgsalamander-0~svn95.orig/www/examples/svg/ainominako.svg0000644000175000017500000025111410753742703022731 0ustar moonmoon 愛野美奈 愛野美奈 svgsalamander-0~svn95.orig/www/examples/svg/duck.svg0000644000175000017500000000662510607673157021543 0ustar moonmoon ]> svgsalamander-0~svn95.orig/www/examples/svg/simba.svg0000644000175000017500000052362110607673157021710 0ustar moonmoon ]> svgsalamander-0~svn95.orig/www/examples/svg/hinorei.svg0000644000175000017500000025743510607673157022261 0ustar moonmoon ]> svgsalamander-0~svn95.orig/doc/0000755000175000017500000000000011562044231015351 5ustar moonmoonsvgsalamander-0~svn95.orig/doc/dev/0000755000175000017500000000000011562044330016127 5ustar moonmoonsvgsalamander-0~svn95.orig/doc/dev/issues.xml0000755000175000017500000020160210607233347020177 0ustar moonmoon 3 NEW P3 svgsalamander current All kitfox 20050116092344 www kitfox milestone 1 ENHANCEMENT 2004-09-17 08:53:13 issues@svgsalamander All Provide support for scripting kitfox 2004-09-17 08:53:13 Currently Salamander SVG does not allow the user to use scripting languages. Provide hooks to allow one to allow the user to integrate the scripting language of their choice to augment the SVG. kitfox 2004-10-13 12:19:04 This is something that should be added. kitfox 2005-01-16 09:23:44 Listing of SVG routines that must be implemented by SVG can be found here: http://www.w3.org/TR/SVG11/ecmascript-binding.html kitfox 2004-10-13 12:19:04 issue_type Issue type DEFECT ENHANCEMENT 4 NEW P3 svgsalamander current All kitfox 20040917091505 www kitfox milestone 1 ENHANCEMENT 2004-09-17 09:15:05 issues@svgsalamander All Provide support for filters (blur, sharpen, etc) kitfox 2004-09-17 09:15:05 Filters are currently not implemented. 5 NEW P3 svgsalamander current All issues@svgsalamander 20041022175544 www sat1196 milestone 1 DEFECT 2004-10-22 17:55:44 issues@svgsalamander All relative positions not supported sat1196 2004-10-22 17:55:44 things like <text x=0.0 y=70.0%> don't work. 6 NEW P3 svgsalamander current All issues@svgsalamander 20050106025123 www kitfox milestone 1 DEFECT 2005-01-06 02:51:23 issues@svgsalamander All Cannot set fill on <tspan> kitfox 2005-01-06 02:51:23 This is due to the shapes of tspans being ored together and the fill element of the containing <text> element being used instead. This behaviour should be changed so that tspans are rendered independantly. 7 NEW P3 svgsalamander current All kitfox 20050106194826 www animentor milestone 1 ENHANCEMENT 2005-01-06 19:48:26 issues@svgsalamander All Animation of <path> element animentor 2005-01-06 19:48:26 Support declarative animations for the path element as in the example below (wavy line that changes shape after 1 second): <path d="M68.4455 69.6056 C119.081 80.456 175.949 67.2012 227.378 64.9652 C252.256 63.8836 275.694 70.7657 300.464 70.7657" style="fill:none;stroke:rgb(0,0,0);stroke-width:1"> <set attributeName="d" begin="1s" dur="0s" fill="freeze" to="M68.4455 69.6056 C119.081 80.456 181.949 188.201 233.378 185.965 C258.256 184.884 275.694 70.7657 300.464 70.7657"/> </path> 8 NEW P3 svgsalamander current All issues@svgsalamander 20050111082536 www sat1196 milestone 1 ENHANCEMENT 2005-01-11 08:25:36 issues@svgsalamander All Scrpting sat1196 2005-01-11 08:25:36 Here is the site for scrpting implementation: http://www.w3.org/TR/SVG11/ecmascript-binding.html. 9 NEW P3 svgsalamander current All issues@svgsalamander 20050123140136 www sat1196 milestone 1 DEFECT 2005-01-23 14:01:36 issues@svgsalamander All x attribute with dy in Tspan sat1196 2005-01-23 14:01:36 In my svg file I create a Tspan with an x=0 and dy="100". As a result Line 140 in Tspan.java throws a NPE because y has not been set. 10 NEW P3 svgsalamander current Macintosh issues@svgsalamander 20050507101009 www milestone 1 ENHANCEMENT 2005-05-07 10:10:09 issues@svgsalamander All Better Exception Handling 2005-05-07 10:10:09 Exception handling (via throws clauses) should communicate to a developer what might go wrong in a given method, and communicate what did go wrong (via messages and nested exceptions) to an operator in a running system. If SVGSalamander develops a large user base, proper exception handling will help focus bug reports and eliminate many repeated questions from developers. 12 NEW P5 svgsalamander current All issues@svgsalamander 20060330164158 www heuermh milestone 1 ENHANCEMENT 2006-03-30 13:35:16 issues@svgsalamander All upload to ibiblio maven repository heuermh 2006-03-30 13:35:16 Date: Wed, 29 Mar 2006 20:31:25 -0500 (EST) From: Michael Heuer To: dev at svgsalamander.dev.java.net Subject: upload to ibiblio maven repository Hello, I am considering replacing Apache Batik with SVG Salamander in my project (also LGPL, see below). I was wondering if the SVG Salamander jar might be uploaded to the central maven repository so that projects like mine, projects that build with maven or with the maven ant tasks, might more reliably include SVG Salamander as a dependency. The process is as follows: Guide to uploading artifacts to Ibiblio > http://maven.apache.org/guides/mini/guide-ibiblio-upload.html Starting with "If you are not using maven as your build system..." I can assist in any way necessary to make this happen. Regards, michael > http://dishevelled.org/iconbundle heuermh 2006-03-30 13:48:57 Created an attachment (id=3) Example pom.xml, filled with dev.java.net defaults heuermh 2006-03-30 13:50:17 Attached example pom.xml, filled with dev.java.net project defaults. That and just guessing when it came to organization, developers, version, etc. kitfox 2006-03-30 16:41:58 Maven information submitted, waiting for reponse. text/xml 3 2006-03-30 13:48:57 Example pom.xml, filled with dev.java.net defaults pom.xml 13 heuermh PHByb2plY3QNCiAgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCiAg eG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCiAg eHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0 cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+DQogIDxtb2RlbFZlcnNpb24+ NC4wLjA8L21vZGVsVmVyc2lvbj4NCiAgPGdyb3VwSWQ+Y29tLmtpdGZveDwvZ3JvdXBJZD4NCiAg PGFydGlmYWN0SWQ+c3ZnLXNhbGFtYW5kZXI8L2FydGlmYWN0SWQ+DQogIDxwYWNrYWdpbmc+amFy PC9wYWNrYWdpbmc+DQogIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCiAgPG5hbWU+U1ZHIFNhbGFt YW5kZXI8L25hbWU+DQogIDxkZXNjcmlwdGlvbj5TVkcgU2FsYW1hbmRlcjwvZGVzY3JpcHRpb24+ DQogIDx1cmw+aHR0cDovL3N2Z3NhbGFtYW5kZXIuZGV2LmphdmEubmV0PC91cmw+DQogIDxvcmdh bml6YXRpb24+DQogICAgPG5hbWU+S2l0Zm94IFN0dWRpb3M8L25hbWU+DQogICAgPHVybD5odHRw Oi8vd3d3LmtpdGZveC5jb208L3VybD4NCiAgPC9vcmdhbml6YXRpb24+DQogIDxzY20+DQogICAg PGNvbm5lY3Rpb24+c2NtOmN2czpwc2VydmVyOmd1ZXN0QGN2cy5kZXYuamF2YS5uZXQ6L2N2czpz dmdzYWxhbWFuZGVyPC9jb25uZWN0aW9uPg0KICA8L3NjbT4NCiAgPGRldmVsb3BlcnM+DQogICAg PGRldmVsb3Blcj4NCiAgICAgIDxuYW1lPk1hcmsgTWNLYXk8L25hbWU+DQogICAgICA8ZW1haWw+ bWFyayBhdCBraXRmb3guY29tPC9lbWFpbD4NCiAgICA8L2RldmVsb3Blcj4NCiAgPC9kZXZlbG9w ZXJzPg0KICA8bGljZW5zZXM+DQogICAgPGxpY2Vuc2U+DQogICAgICA8bmFtZT5HTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpPC9uYW1lPg0KICAgICAgPHVybD5odHRwOi8v d3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWw8L3VybD4NCiAgICAgIDxkaXN0cmlidXRp b24+cmVwbzwvZGlzdHJpYnV0aW9uPg0KICAgIDwvbGljZW5zZT4NCiAgPC9saWNlbnNlcz4NCiAg PG1haWxpbmdMaXN0cz4NCiAgICA8bWFpbGluZ0xpc3Q+DQogICAgICA8bmFtZT5Bbm5vdW5jZW1l bnQgTGlzdDwvbmFtZT4NCiAgICAgIDxzdWJzY3JpYmU+YW5ub3VuY2Utc3Vic2NyaWJlQHN2Z3Nh bGFtYW5kZXIuZGV2LmphdmEubmV0PC9zdWJzY3JpYmU+DQogICAgICA8dW5zdWJzY3JpYmU+YW5u b3VuY2UtdW5zdWJzY3JpYmVAc3Znc2FsYW1hbmRlci5kZXYuamF2YS5uZXQ8L3Vuc3Vic2NyaWJl Pg0KICAgICAgPGFyY2hpdmU+aHR0cHM6Ly9zdmdzYWxhbWFuZGVyLmRldi5qYXZhLm5ldC9zZXJ2 bGV0cy9TdW1tYXJpemVMaXN0P2xpc3ROYW1lPWFubm91bmNlPC9hcmNoaXZlPg0KICAgIDwvbWFp bGluZ0xpc3Q+DQogICAgPG1haWxpbmdMaXN0Pg0KICAgICAgPG5hbWU+RGV2ZWxvcGVyIExpc3Q8 L25hbWU+DQogICAgICA8c3Vic2NyaWJlPmRldi1zdWJzY3JpYmVAc3Znc2FsYW1hbmRlci5kZXYu amF2YS5uZXQ8L3N1YnNjcmliZT4NCiAgICAgIDx1bnN1YnNjcmliZT5kZXYtdW5zdWJzY3JpYmVA c3Znc2FsYW1hbmRlci5kZXYuamF2YS5uZXQ8L3Vuc3Vic2NyaWJlPg0KICAgICAgPGFyY2hpdmU+ aHR0cHM6Ly9zdmdzYWxhbWFuZGVyLmRldi5qYXZhLm5ldC9zZXJ2bGV0cy9TdW1tYXJpemVMaXN0 P2xpc3ROYW1lPWRldjwvYXJjaGl2ZT4NCiAgICA8L21haWxpbmdMaXN0Pg0KICAgIDxtYWlsaW5n TGlzdD4NCiAgICAgIDxuYW1lPlVzZXJzIExpc3Q8L25hbWU+DQogICAgICA8c3Vic2NyaWJlPnVz ZXJzLXN1YnNjcmliZUBzdmdzYWxhbWFuZGVyLmRldi5qYXZhLm5ldDwvc3Vic2NyaWJlPg0KICAg ICAgPHVuc3Vic2NyaWJlPnVzZXJzLXVuc3Vic2NyaWJlQHN2Z3NhbGFtYW5kZXIuZGV2LmphdmEu bmV0PC91bnN1YnNjcmliZT4NCiAgICAgIDxhcmNoaXZlPmh0dHBzOi8vc3Znc2FsYW1hbmRlci5k ZXYuamF2YS5uZXQvc2VydmxldHMvU3VtbWFyaXplTGlzdD9saXN0TmFtZT11c2VyczwvYXJjaGl2 ZT4NCiAgICA8L21haWxpbmdMaXN0Pg0KICAgIDxtYWlsaW5nTGlzdD4NCiAgICAgIDxuYW1lPklz c3VlcyBMaXN0PC9uYW1lPg0KICAgICAgPHN1YnNjcmliZT5pc3N1ZXMtc3Vic2NyaWJlQHN2Z3Nh bGFtYW5kZXIuZGV2LmphdmEubmV0PC9zdWJzY3JpYmU+DQogICAgICA8dW5zdWJzY3JpYmU+aXNz dWVzLXVuc3Vic2NyaWJlQHN2Z3NhbGFtYW5kZXIuZGV2LmphdmEubmV0PC91bnN1YnNjcmliZT4N CiAgICAgIDxhcmNoaXZlPmh0dHBzOi8vc3Znc2FsYW1hbmRlci5kZXYuamF2YS5uZXQvc2Vydmxl dHMvU3VtbWFyaXplTGlzdD9saXN0TmFtZT1pc3N1ZXM8L2FyY2hpdmU+DQogICAgPC9tYWlsaW5n TGlzdD4NCiAgICA8bWFpbGluZ0xpc3Q+DQogICAgICA8bmFtZT5DVlMgTGlzdDwvbmFtZT4NCiAg ICAgIDxzdWJzY3JpYmU+Y3ZzLXN1YnNjcmliZUBzdmdzYWxhbWFuZGVyLmRldi5qYXZhLm5ldDwv c3Vic2NyaWJlPg0KICAgICAgPHVuc3Vic2NyaWJlPmN2cy11bnN1YnNjcmliZUBzdmdzYWxhbWFu ZGVyLmRldi5qYXZhLm5ldDwvdW5zdWJzY3JpYmU+DQogICAgICA8YXJjaGl2ZT5odHRwczovL3N2 Z3NhbGFtYW5kZXIuZGV2LmphdmEubmV0L3NlcnZsZXRzL1N1bW1hcml6ZUxpc3Q/bGlzdE5hbWU9 Y3ZzPC9hcmNoaXZlPg0KICAgIDwvbWFpbGluZ0xpc3Q+DQogIDwvbWFpbGluZ0xpc3RzPg0KPC9w cm9qZWN0Pg0K https://svgsalamander.dev.java.net/nonav/issues/showattachment.cgi/3/pom.xml 15 NEW P3 svgsalamander current All issues@svgsalamander 20060831112715 www kirillcool milestone 1 DEFECT 2006-08-25 15:52:57 issues@svgsalamander All IllegalArgumentException on one of the Tango icons kirillcool 2006-08-25 15:52:57 On the apps/preferences-desktop-remote-desktop.svg svgsalamander throws the following exception: Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: User must specify at least 2 colors at com.kitfox.svg.batik.MultipleGradientPaint.<init>(MultipleGradientPaint.java:126) at com.kitfox.svg.batik.LinearGradientPaint.<init>(LinearGradientPaint.java:256) at com.kitfox.svg.LinearGradient.getPaint(LinearGradient.java:117) at com.kitfox.svg.ShapeElement.renderShape(ShapeElement.java:122) at com.kitfox.svg.Path.render(Path.java:94) at com.kitfox.svg.Group.render(Group.java:152) at com.kitfox.svg.Group.render(Group.java:152) at com.kitfox.svg.Group.render(Group.java:152) at com.kitfox.svg.SVGRoot.render(SVGRoot.java:214) at com.kitfox.svg.SVGDiagram.render(SVGDiagram.java:83) at com.kitfox.svg.app.beans.SVGIcon.paintIcon(SVGIcon.java:153) The Tango icon set can be downloaded from http://tango.freedesktop.org/Tango_Icon_Library#Download kitfox 2006-08-26 01:05:38 Which file is causing the problem? If oyou could attach a specific SVG file causing an error to this report, I can investigate it. kirillcool 2006-08-28 09:00:04 I gave the download link in the original report and included the filename: URL: http://tango.freedesktop.org/Tango_Icon_Library#Download Filename: apps/preferences-desktop-remote-desktop.svg In addition, i'd advise you try running SvgIcon (or some other test app you have) on all icons in the Tango set - your library fails on quite a few other SVG files with different messages. Kirill kitfox 2006-08-30 17:29:09 Which link has the files? The are four links to .tar.gz files, one archive of which contains only .pngs and the rest of which seem to have source code. Please attach the exact svg file or zip archive that is causing the problem. I can't hunt through web pages looking for the right one. kirillcool 2006-08-30 17:56:26 The link to the icon archive is http://tango-project.org/releases/tango-icon-theme-0.7.2.tar.gz Open it and extract all contents. Under tango-icon-theme-0.7.2\scalable you will see all the SVG files grouped in subfolders. The reason i'm not attaching a specific SVG file is that there's a whole bunch of other SVGs in this set that produce exceptions and / or System.err messages when used from SvgIcon. kirillcool 2006-08-31 11:27:15 I've been playing with SVG Salamander and other SVG icon sets, and there are quite a few problems that it's having on GNOME set [1]. [1] http://ftp.gnome.org/pub/GNOME/sources/gnome-themes-extras/0.9/gnome-themes-extras-0.9.0.tar.gz kitfox 2006-08-26 01:05:38 priority Priority P2 P3 23 NEW P3 svgsalamander current All issues@svgsalamander 20060913142723 www cmdickson milestone 1 FEATURE 2006-09-13 14:27:23 issues@svgsalamander Windows XP Icon "Cloning" cmdickson 2006-09-13 14:27:23 I was wondering if it would possible to allow a way to create a new, "cloned" instance of SVGIcon based on an existing icon/diagram. In my application I need to display instances of the same image/icon just with different text and/or preferred size for each. Currently, the SVG XML is reread each time a new instance is loaded because I force each new SVGIcon to have a separate SVGUniverse. If they use the same SVGUniverse the diagram cache is used and the text is just written over the previous text instead of starting with a clean image. I have tried a few things (like attempting to duplicate() the SVGUniverse), but with no luck. Perhaps there is already a way to do this? Thank you, Cameron 24 NEW P3 svgsalamander current All issues@svgsalamander 20060913230852 www miira milestone 1 DEFECT 2006-09-13 23:08:52 issues@svgsalamander All serialization - diagram problems (Java 5) miira 2006-09-13 23:08:52 I did mark transient textShape in Text. transient Shape textShape; Then I rewrote writeObject and readObject. see at the end. Finally universe is duplicated properly. If I export it to XML, I see the same SVG as the original. BUT it fails, when repainting. ;( It is, because diagram is null. See this stacktrace (I'm not sure, if the lines matches with cvs version, therefore I send also the few lines of code) If You could help me, would be great. The diagram should maybe set into the elements somehow, somewhere? Thanks Mirek Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException at com.kitfox.svg.Group.render(Group.java:118) at com.kitfox.svg.SVGRoot.render(SVGRoot.java:246) at com.kitfox.svg.SVGDiagram.render(SVGDiagram.java:86) at com.kitfox.svg.app.beans.SVGPanel.paintComponent(SVGPanel.java:76) at javax.swing.JComponent.paint(Unknown Source) group 118 is : boolean ignoreClip = diagram.ignoringClipHeuristic(); SVGElement just calls defaultReadObject and defaultWriteObject. Text serialization code: private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); if (textShape != null) { out.writeBoolean(true); // write general path PathIterator it = textShape.getPathIterator(null); // count it (for easier reading) int count = 0; while (!it.isDone()) { count++; it.next(); } out.writeInt(it.getWindingRule()); out.writeInt(count); // serialize general path it = textShape.getPathIterator(null); while (!it.isDone()) { float []cords = new float[6]; int type = it.currentSegment(cords); out.writeInt(type); switch (type) { case PathIterator.SEG_LINETO: case PathIterator.SEG_MOVETO: out.writeFloat(cords[0]); out.writeFloat(cords[1]); break; case PathIterator.SEG_QUADTO: out.writeFloat(cords[0]); out.writeFloat(cords[1]); out.writeFloat(cords[2]); out.writeFloat(cords[3]); break; case PathIterator.SEG_CUBICTO: out.writeFloat(cords[0]); out.writeFloat(cords[1]); out.writeFloat(cords[2]); out.writeFloat(cords[3]); out.writeFloat(cords[4]); out.writeFloat(cords[5]); break; case PathIterator.SEG_CLOSE: break; default: break; } it.next(); } } else { out.writeBoolean(false); } } private void readObject(ObjectInputStream in) throws IOException { content = new LinkedList(); try { in.defaultReadObject(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } boolean isThere = in.readBoolean(); if (isThere) { // todo read general path int rule = in.readInt(); textShape = new GeneralPath(rule); GeneralPath gp = (GeneralPath)textShape; int count = in.readInt(); float x1, y1, x2, y2, x3, y3; for (int i = 0; i < count; i++) { int type = in.readInt(); switch (type) { case PathIterator.SEG_MOVETO: x1 = in.readFloat(); y1 = in.readFloat(); gp.moveTo(x1, y1); break; case PathIterator.SEG_LINETO: x1 = in.readFloat(); y1 = in.readFloat(); gp.lineTo(x1, y1); break; case PathIterator.SEG_QUADTO: x1 = in.readFloat(); y1 = in.readFloat(); x2 = in.readFloat(); y2 = in.readFloat(); gp.quadTo(x1, y1, x2, y2); break; case PathIterator.SEG_CUBICTO: x1 = in.readFloat(); y1 = in.readFloat(); x2 = in.readFloat(); y2 = in.readFloat(); x3 = in.readFloat(); y3 = in.readFloat(); gp.curveTo(x1, y1, x2, y2, x3, y3); break; case PathIterator.SEG_CLOSE: gp.closePath(); break; default: break; } } } else { textShape = null; } } 25 STARTED P3 svgsalamander current All issues@svgsalamander 20060916183550 www miira milestone 1 ENHANCEMENT 2006-09-16 02:15:19 issues@svgsalamander All use css miira 2006-09-16 02:15:19 Hello, I think, svgSalamander doesn't use <?xml-stylesheet..> instruction. Like this: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="xchords-default.css" type="text/css" ?> <svg .... Could it be enhanced to support that? Below is my sample file (see xchords.barad.cz). It's displayed empty, because all styling attributes are moved into the CSS. ;( Thanks Mirek <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="xchords-default.css" type="text/css" ?> <svg xmlns="http://www.w3.org/2000/svg" width="280" height="420" viewBox="0 0 400 400" fill="white"> <title>Chord C</title> <!--Generated by XChords utility, v.0.3--> <!--chord--> <g id="C"> <!--begin basic guitar image--> <text class="note" x="35" y="5">Generated by XChords utility, v 0.3</text> <!--chord label--> <text class="label" x="192" y="67">C</text> <!--guitar end neck--> <line class="endneck" x1="92" y1="87" x2="292" y2="87"/> <!--guitar neck--> <rect class="neck" x="100" y="100" width="184" height="200"/> <!--plot - frets--> <line class="frets" x1="102" y1="152" x2="282" y2="152"/> <line class="frets" x1="102" y1="202" x2="282" y2="202"/> <line class="frets" x1="102" y1="252" x2="282" y2="252"/> <!--plot - strings--> <line class="strings" x1="117" y1="94" x2="117" y2="299"/> <line class="strings" x1="147" y1="94" x2="147" y2="299"/> <line class="strings" x1="177" y1="94" x2="177" y2="299"/> <line class="strings" x1="207" y1="94" x2="207" y2="299"/> <line class="strings" x1="237" y1="94" x2="237" y2="299"/> <line class="strings" x1="267" y1="94" x2="267" y2="299"/> <!--end basic guitar image--> <!--position--> <g id="C.Pos.1"> <text class="barrenum" x="85" y="140">I.</text> <!--endneck--> <path class="spacer" d="M87,272 A100,40 0 0,0 192,272 A100,40 0 0,1 297,272 L297,350 L87,350 Z"/> <path class="spacerline" d="M87,272 A100,40 0 0,0 192,272 A100,40 0 0,1 297,272"/> <!--a--> <circle class="dot" cx="147" cy="227" r="14"/> <text class="finger" x="141" y="235">3</text> <!--d--> <circle class="dot" cx="177" cy="177" r="14"/> <text class="finger" x="171" y="185">2</text> <!--b--> <circle class="dot" cx="237" cy="127" r="14"/> <text class="finger" x="230" y="135">1</text> </g> </g> </svg> kitfox 2006-09-16 18:35:50 CSS has not been implemented yet. External and inlined css sheets should be implemented at the same time. kitfox 2006-09-16 18:35:50 issue_status Status NEW STARTED 26 NEW P3 svgsalamander current All issues@svgsalamander 20060916113516 www miira milestone 1 DEFECT 2006-09-16 11:35:16 issues@svgsalamander All use attributes height and width are not working miira 2006-09-16 11:35:16 Hello, It seems, that whatever I set in <use> element as width and height, doesn't matter, the referenced SVG is included asis, in it's original size. That is very important feature to me, is there some quick way around it? Thanks Mirek 27 NEW P3 svgsalamander current All issues@svgsalamander 20061003213623 www kitfox milestone 1 DEFECT 2006-10-03 21:35:18 issues@svgsalamander All putting SVG elements inside SVG elements kitfox 2006-10-03 21:35:18 Hi again Mark, Found another bug, this one involves putting SVG elements inside SVG elements. The attached file demonstrates the problem. Regards, Magnus kitfox 2006-10-03 21:36:23 Created an attachment (id=5) bad svg file text/xml 5 2006-10-03 21:36:21 bad svg file bishop.svg 3 kitfox PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxz dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKCQlpZD0ic3ZnMSIKCQl3aWR0 aD0iODciCgkJaGVpZ2h0PSI4NyI+CjxyZWN0IHg9IjAuNSIgeT0iMC41IiB3aWR0aD0iODYuNSIg aGVpZ2h0PSI4Ni41IiBmaWxsPSJub25lIiBzdHJva2U9ImJsdWUiIC8+CjxzdmcgeG1sbnM9Imh0 dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAKCQkgdmVyc2lvbj0iMS4xIiAKCQkgdmlld0JveD0i MCAwIDY3IDg0IgoJCSBpZD0ic3ZnMiIKCQkgeD0iMTAlIgoJCSB5PSIxMCUiCgkJIHdpZHRoPSI4 MCUiCgkJIGhlaWdodD0iODAlIgoJCSBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0 Ij4KCTxnIGlkPSJnMSIgCgkJIHRyYW5zZm9ybT0ibWF0cml4KDAuMDkzLDAsMCwtMC4wOTMsNiw3 OSkiIAoJCSBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTpub25lIj4KCQk8cGF0aAoJCQlpZD0i cGF0aDExIgoJCQlkPSJNIDE1Myw2MDggCgkJCSAgIEMgMTUwLDU5MyAxNzYsNjEwIDIxMyw2MjIg CgkJCQkgQyAyMjMsNTI1IDIwOSw1MjYgMTg3LDQ4NyAKCQkJCSBDIDExNiwzNjMgMTc2LDQyMSAy MDMsNDU2IAoJCQkJIEMgMjI1LDQ4NCAyMjUsNDg5IDI1NSw1MDYgCgkJCQkgQyAzMjEsNTA5IDMw OCw1MTcgMzIyLDUxNyAKCQkJCSBDIDMzOCw1MTggMzE3LDUwOSA0MTYsNTAyIAoJCQkJIEMgNDE2 LDQ4MiA0MDgsNDQ0IDM4Miw0NTIgCgkJCQkgQyAzNDAsNDYzIDMzMCw0NDMgMzg0LDQxNSAKCQkJ CSBDIDQzMSwzOTAgNDQ0LDQxNSA0NDcsNTI2IAoJCQkJIEMgNDQ3LDU4MSA0NTksNjQ5IDQ2MSw2 NzIgCgkJCQkgQyA0MDMsNjc5IDQzOCw2NjMgNDAwLDY2MiAKCQkJCSBDIDM3MCw2NjAgMzcwLDY2 MCAzNDUsNjYwIAoJCQkJIEMgMzY1LDcyMCA0MTEsNzEwIDM3OCw3MjcgCgkJCQkgQyAzMzYsNzQ5 IDM1Nyw3MjcgMzMyLDcyMSAKCQkJCSBDIDMwMiw3MTQgMjYyLDcxNSAyOTMsNzM2IAoJCQkJIEMg Mjk0LDc0OCAyNjYsNzcwIDI2MSw3NTggCgkJCQkgQyAyMzMsNjkxIDE2MCw2MzYgMTUzLDYwOCB6 IAoJCQkJIE0gMzI0LDY2OSAKCQkJCSBDIDMwMSw2NTMgMjQwLDY1MyAyNDAsNjY5IAoJCQkJIEMg MjQwLDY4MiAyNjEsNjk1IDI5Nyw2OTQgCgkJCQkgQyAzMjEsNjkzIDM0Niw2OTYgMzI0LDY2OSB6 IAoJCQkJIE0gMzA4LDYxOCAKCQkJCSBDIDMwOCw1OTYgMjk5LDYwMCAyODAsNTk5IAoJCQkJIEMg MjM1LDU5NiAyNDIsNTkyIDI0NCw2MTUgCgkJCQkgQyAyNDQsNjI2IDI0NSw2MzIgMjc2LDYzMyAK CQkJCSBDIDMwNyw2MzUgMzA3LDYyOSAzMDgsNjE4IHogCgkJCQkgTSA0MTcsNjE0IAoJCQkJIEMg NDE2LDU5OCA0MjAsNTkyIDM3NCw1OTUgCgkJCQkgQyAzMzAsNTk3IDM0MCw1OTUgMzQwLDYxNiAK CQkJCSBDIDMzOSw2MzEgMzM2LDYzNiAzNzYsNjM1IAoJCQkJIEMgNDIwLDYzNCA0MTcsNjMxIDQx Nyw2MTQgeiAKCQkJCSBNIDMxMCw1NTUgCgkJCQkgQyAzMTAsNTM5IDMwMyw1MzUgMjc1LDUzNSAK CQkJCSBDIDI0NCw1MzUgMjQwLDUzNiAyNDAsNTU1IAoJCQkJIEMgMjM5LDU3NyAyNTAsNTc1IDI4 Miw1NzUgCgkJCQkgQyAzMDMsNTc1IDMxMCw1NzAgMzEwLDU1NSB6IAoJCQkJIE0gNDEyLDU1NSAK CQkJCSBDIDQxMiw1MzkgNDEzLDUzNSA0MDAsNTM1IAoJCQkJIEMgMzQ4LDUzMyAzNDUsNTM0IDM0 Miw1NTMgCgkJCQkgQyAzMzksNTY2IDM1NCw1NjggMzc3LDU3MCAKCQkJCSBDIDQwNyw1NzEgNDEy LDU3MCA0MTIsNTU1IHoiLz4KCQk8cGF0aAoJCQlpZD0icGF0aDEyIgoJCQlkPSJNIDE2MCwzNTQg CgkJCSAgIEMgMTYwLDM0NSAxNTYsMzMyIDEzNywzMTUgCgkJCQkgQyA3MiwyNjYgNzEsMjU4IDEy MCwyNjAgCgkJCQkgQyAxNzMsMjYxIDEzOCwyMTMgNzMsMTY4IAoJCQkJIEMgNjAsMTU5IDQzLDEz OSA1MiwxMjYgCgkJCQkgQyA2MCwxMTIgOTQsMTQyIDExMywxMzIgCgkJCQkgQyAxMjUsMTI0IDEx NywxMTAgMTIwLDgxIAoJCQkJIEMgMTI1LDI4IDEzMiw4IDE0OSwzOSAKCQkJCSBDIDE2NCw2OCAx NjIsMTEyIDE0NCwxMzkgCgkJCQkgQyAxMjgsMTYxIDEyOSwxNjIgMTYxLDE5NiAKCQkJCSBDIDE4 OSwyMjQgMTgwLDIxNiAxOTUsMjM4IAoJCQkJIEMgMTM5LDI3OSAxNTIsMjgyIDE3NCwzMDkgCgkJ CQkgQyAxOTIsMzMwIDE4OSwzMjkgMjAzLDM0OSAKCQkJCSBDIDE3OSwzNjkgMTYwLDM3NCAxNjAs MzU0IHoiLz4KCQk8cGF0aAoJCQlpZD0icGF0aDEzIgoJCQlkPSJNIDM3MCwzMzUgCgkJCSAgIEMg MzQxLDMyNiAzMTgsMzE2IDMwNSwzMjAgCgkJCQkgQyAyNjYsMzI4IDI2MywzMjcgMjk0LDMwNSAK CQkJCSBDIDMxNywyODYgMzUwLDI4NSA0MTUsMzAzIAoJCQkJIEMgNDQ3LDMxMSA0NjksMzIwIDQ2 OCwzMzEgCgkJCQkgQyA0NjMsMzY0IDQyMywzNTAgMzcwLDMzNSB6Ii8+CgkJPHBhdGgKCQkJaWQ9 InBhdGgxNCIKCQkJZD0iTSAzOTAsMjQ0IAoJCQkgICBDIDM1OCwyMzYgMzI1LDIyNyAzMDIsMjMx IAoJCQkJIEMgMjYwLDI0MCAyNDgsMjM3IDI1MiwyMjkgCgkJCQkgQyAyNjEsMTk5IDI4OCwxOTUg MzcyLDIwOCAKCQkJCSBDIDQxOCwyMTQgNDczLDIyMiA1MDksMjIwIAoJCQkJIEMgNTUzLDIxNiA1 NTksMjIyIDU1OCwyMzggCgkJCQkgQyA1NTMsMjcwIDQ2NywyNjQgMzkwLDI0NCB6Ii8+CgkJPHBh dGgKCQkJaWQ9InBhdGgxNSIKCQkJZD0iTSA0NjAsMTcyIAoJCQkgICBDIDQ2MCwxNTcgNDc2LDg3 IDQ3OCw2OCAKCQkJCSBDIDQ1Myw2MiA0MjksNjEgNDE2LDY2IAoJCQkJIEMgMzUxLDg2IDM4NCwz MyA0NjAsMjIgCgkJCQkgQyA1MTEsMTUgNTMyLDY0IDUwNCwxNjAgCgkJCQkgQyA0ODksMjA3IDQ2 MCwyMTQgNDYwLDE3MiB6Ii8+CiAgPC9nPgogIDxnIGlkPSJnMiIgdHJhbnNmb3JtPSJtYXRyaXgo MSwwLDAsMSwwLDApIj4KICAgIDxwYXRoCiAgICAgIGlkPSJwYXRoMjEiCiAgICAgIGQ9Ik0gMSw4 MyBsIDY3LDAgbCAtNiwtNzAgbCAtMjcsLTEyIGwgLTI5LDEyIHoiCgkJCXN0eWxlPSJmaWxsOm5v bmU7CgkJCSAgICAgICBmaWxsLW9wYWNpdHk6MTsKCQkJCQkJIGZpbGwtcnVsZTpldmVub2RkOwoJ CQkJCQkgc3Ryb2tlOiMwMDAwMDA7CgkJCQkJCSBzdHJva2Utd2lkdGg6MXB4OwoJCQkJCQkgc3Ry b2tlLWxpbmVjYXA6cm91bmQ7CgkJCQkJCSBzdHJva2UtbGluZWpvaW46cm91bmQ7CgkJCQkJCSBz dHJva2Utb3BhY2l0eToxIi8+CiAgPC9nPgo8L3N2Zz4KPC9zdmc+ https://svgsalamander.dev.java.net/nonav/issues/showattachment.cgi/5/bishop.svg 29 NEW P3 svgsalamander current All issues@svgsalamander 20070223160556 www kitfox milestone 1 ENHANCEMENT 2007-02-23 16:05:56 issues@svgsalamander All Provide webstart friendly opening of files on local disk kitfox 2007-02-23 16:05:56 Hi Mark At 03:42 20.02.2007, you wrote: > >Hi Peter, > > > >I understand your concern. Great! > >Unfortunately, these permissions are necessary to allow the program to read files. I may help here, see below. > >I've created a restricted version that you can access on this webpage: > > > >https://svgsalamander.dev.java.net/secure.html Fine:-) > >For some reason, java.dev.net won't let me upload some corrections to this web page. However, the listed URLs will work if you replace the http:// with https:// I found (as a visitor) _always_ sourceforge much better than java.net: more screenshots, browse source, better docs, no registration to just evaluate, better webpage (on java.net project and java.net navigation is not clearly separated) ... Now some info: 1) Open local files 2) Exception 3) Still asks for full access in webstart 1.4.2 1) Open local files =================== To open files in an resticted app ( sun starts to learn:-) Index: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html Straight to the solution: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/examples.html Especially FileOpenService Service -let user choose an arbitrary file ExtendedService Service - ask for a special file (c:\winnt\passwords) and let the user grant/deny permission But i found no 'Net Connect Service'. A solution would be (if you can install a reflection service on the server of the jnlp) to reflect/redirect a request: http://your.server.tld/download?url=ftp%3A%2F%2Fthe%2Fsvg%2Fhere.svg (and maybe restrict it since any criminal intent may download some ugly content - and your server ip is cought in the servers log) 2) Exception ============= I got an exception (opening the duck): i think you should pack the dtd etc. into the jar and use an entity resolver or an .. (forgot what it is named: a thingy that let you pack all those dtd in a pack and manages this for you) the first of your svg-links isn't there - got an 404('Sorry, this page not found on java.net.') i haven't tested the others. -- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 ---- ><8 -- Java Web Start 1.5.0_10 Verwendung der JRE-Version 1.5.0_10 Java HotSpot(TM) Client VM ---------------------------------------------------- java.security.AccessControlException: access denied (java.net.SocketPermission www.w3.org:80 connect,resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264) at java.security.AccessController.checkPermission(AccessController.java:427) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034) at sun.net.www.http.HttpClient.openServer(HttpClient.java:476) at sun.net.www.http.HttpClient.<init>(HttpClient.java:231) at sun.net.www.http.HttpClient.New(HttpClient.java:304) at sun.net.www.http.HttpClient.New(HttpClient.java:316) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:817) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:769) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:694) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:938) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:973) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:905) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:872) at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:282) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:1021) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242) at javax.xml.parsers.SAXParser.parse(SAXParser.java:375) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:433) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:325) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:306) at com.kitfox.svg.app.SVGPlayer.loadURL(SVGPlayer.java:185) at com.kitfox.svg.app.SVGPlayer.cm_loadUrlActionPerformed(SVGPlayer.java:341) at com.kitfox.svg.app.SVGPlayer.access$300(SVGPlayer.java:48) at com.kitfox.svg.app.SVGPlayer$5.actionPerformed(SVGPlayer.java:265) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) [snip] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) java.lang.NullPointerException at com.kitfox.svg.SVGDisplayPanel.setDiagram(SVGDisplayPanel.java:60) at com.kitfox.svg.app.SVGPlayer.loadURL(SVGPlayer.java:209) at com.kitfox.svg.app.SVGPlayer.cm_loadUrlActionPerformed(SVGPlayer.java:341) at com.kitfox.svg.app.SVGPlayer.access$300(SVGPlayer.java:48) at com.kitfox.svg.app.SVGPlayer$5.actionPerformed(SVGPlayer.java:265) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) [snip] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) 3) Still asks for full access in webstart 1.4.2 =============================================== This maybe only a loacal misconfiguration on my machine: When i use webstart 1.4.2 (that uses jre1.5 for your app) it still asks for full access. Don't know why, just to inform you Greeting Peter -- No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.441 / Virus Database: 268.18.2/692 - Release Date: 18/02/2007 4:35 PM 30 NEW P3 svgsalamander current All issues@svgsalamander 20070223160952 www kitfox milestone 1 DEFECT 2007-02-23 16:09:52 issues@svgsalamander All Fix requirement to load DTDs when network down kitfox 2007-02-23 16:09:52 Hi Mark, again At 03:42 20.02.2007, you wrote: > >I understand your concern. Unfortunately, these permissions are necessary to allow the program to read files. I've created a restricted version that you can access on this webpage: ... i answered this ... and now remembered the 'utility' to have dtd in a distribution to work without networkaccess. You may look here: http://ant.apache.org/manual/CoreTypes/xmlcatalog.html (probably you know this much better than me, but if not it may help) Greetings Peter 31 NEW P3 svgsalamander current All issues@svgsalamander 20070227033022 www sarxos milestone 1 DEFECT 2007-02-27 03:30:22 issues@svgsalamander Windows XP NPE in LinearGradientPaintContext on MacOS X sarxos 2007-02-27 03:30:22 On XP, Fedora or Qubuntu it works perfectly, but on MacOS X this class generate NullPointerException. This is my stacktrace: Exception in thread "AWT-EventQueue-0" ... Caused by: java.lang.NullPointerException at com.kitfox.svg.batik.LinearGradientPaintContext.<init>(LinearGradientPaintContext.java:132) at com.kitfox.svg.batik.LinearGradientPaint.createContext(LinearGradientPaint.java:313) at apple.awt.OSXSurfaceData.setupPaint(OSXSurfaceData.java:760) at apple.awt.OSXSurfaceData.setupGraphicsState(OSXSurfaceData.java:1085) at apple.awt.CPeerSurfaceData.setupGraphicsState(CPeerSurfaceData.java:133) at apple.awt.OSXSurfaceData.setupGraphicsState(OSXSurfaceData.java:1013) at apple.awt.OSXSurfaceData.drawfillShape(OSXSurfaceData.java:1346) at apple.awt.CRenderer.drawfillShape(CRenderer.java:536) at apple.awt.CRenderer.fill(CRenderer.java:574) at apple.awt.CRenderer.fill(CRenderer.java:561) at sun.java2d.pipe.ValidatePipe.fill(ValidatePipe.java:142) at sun.java2d.SunGraphics2D.fill(SunGraphics2D.java:2571) at com.kitfox.svg.ShapeElement.renderShape(ShapeElement.java:237) at com.kitfox.svg.Path.render(Path.java:94) at com.kitfox.svg.Group.render(Group.java:161) at com.kitfox.svg.Group.render(Group.java:161) at com.kitfox.svg.SVGRoot.render(SVGRoot.java:268) at com.kitfox.svg.SVGDiagram.render(SVGDiagram.java:88) at com.kitfox.svg.app.beans.SVGIcon.paintIcon(SVGIcon.java:135) ... 16 more I propose this solution: code from LinearGradientPaintContext in line 132: // ---------------------------------------------- Object colorRend = hints.get(RenderingHints.KEY_COLOR_RENDERING); Object rend = hints.get(RenderingHints.KEY_RENDERING); // ---------------------------------------------- replace to new code: // ---------------------------------------------- Object colorRend; Object rend; // here on MAcOsX NPE is generated when hins is null. if(hints == null) { colorRend = RenderingHints.VALUE_COLOR_RENDER_DEFAULT; rend = RenderingHints.VALUE_RENDER_DEFAULT; } else { colorRend = hints.get(RenderingHints.KEY_COLOR_RENDERING); rend = hints.get(RenderingHints.KEY_RENDERING); } // ---------------------------------------------- and thats all folks ;P Below I put simple test program (of course for MacOsX): // ----------------------------------------- import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; import java.net.URI; import javax.swing.JButton; import javax.swing.JFrame; import com.kitfox.svg.SVGCache; import com.kitfox.svg.SVGUniverse; import com.kitfox.svg.app.beans.SVGIcon; /** * Simple NPE generation.<br> * @author Bartosz Firyn (SarXos) * @version 0.1 2007-02-27 */ public class TestNPEinLinearGradientPaintContext { /** * for testing.<br> * @param args */ public static void main(String[] args) { StringReader reader = new StringReader(makeDynamicSVG()); SVGUniverse uni = SVGCache.getSVGUniverse(); URI svguri = uni.loadSVG(reader, "mysvg"); SVGIcon icon = new SVGIcon(); icon.setAntiAlias(true); icon.setSvgURI(svguri); // create simple frame with button with svg icon. JFrame f = new JFrame(); JButton b = new JButton(); b.setIcon(icon); f.add(b); f.pack(); f.setVisible(true); } private static String makeDynamicSVG() { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"); pw.println("<svg"); pw.println(" xmlns:svg=\"http://www.w3.org/2000/svg\""); pw.println(" xmlns=\"http://www.w3.org/2000/svg\""); pw.println(" xmlns:xlink=\"http://www.w3.org/1999/xlink\""); pw.println(" version=\"1.0\""); pw.println(" width=\"70.226791\""); pw.println(" height=\"49.543922\""); pw.println(" id=\"svg5241\">"); pw.println(" <defs"); pw.println(" id=\"defs5243\">"); pw.println(" <linearGradient"); pw.println(" id=\"linearGradient14160\">"); pw.println(" <stop"); pw.println(" style=\"stop-color:white;stop-opacity:1\""); pw.println(" offset=\"0\""); pw.println(" id=\"stop14162\" />"); pw.println(" <stop"); pw.println(" style=\"stop-color:#006dff;stop-opacity:0\""); pw.println(" offset=\"1\""); pw.println(" id=\"stop14164\" />"); pw.println(" </linearGradient>"); pw.println(" <linearGradient"); pw.println(" x1=\"-5.4896049\" y1=\"24.897709\""); pw.println(" x2=\"47.385681\" y2=\"13.053671\""); pw.println(" id=\"linearGradient14166\""); pw.println(" xlink:href=\"#linearGradient14160\""); pw.println(" gradientUnits=\"userSpaceOnUse\""); pw.println(" gradientTransform=\"translate(-0.2,0.125749)\" />"); pw.println(" <linearGradient"); pw.println(" x1=\"72.292137\""); pw.println(" y1=\"34.266876\""); pw.println(" x2=\"29.531235\""); pw.println(" y2=\"14.998215\""); pw.println(" id=\"linearGradient14170\""); pw.println(" xlink:href=\"#linearGradient14160\""); pw.println(" gradientUnits=\"userSpaceOnUse\""); pw.println(" gradientTransform=\"translate(-0.2,0.125749)\" />"); pw.println(" </defs>"); pw.println(" <g"); pw.println(" transform=\"translate(0.2,-0.125749)\""); pw.println(" id=\"layer1\">"); pw.println(" <path"); pw.println(" d=\"M 0,25.074486 L 34.648232,0.32574856 L 69.826795,25.074486 L 34.648232,49.46967 L 0,25.074486 z \""); pw.println(" style=\"fill:#006dff;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\""); pw.println(" id=\"path5249\" />"); pw.println(" <path"); pw.println(" d=\"M 1.9350162,25.065652 L 34.129913,1.9072114 L 68.245332,25.065652 L 34.660243,47.888208 L 1.9350162,25.065652 z \""); pw.println(" style=\"fill:url(#linearGradient14166);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.38094512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\""); pw.println(" id=\"path13273\" />"); pw.println(" <path"); pw.println(" d=\"M 68.068556,25.171892 L 35.074807,47.711431 L 1.5814628,24.640204 L 34.721254,1.3768813 L 68.068556,25.171892 z \""); pw.println(" style=\"fill:url(#linearGradient14170);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.38094512;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\""); pw.println(" id=\"path14168\" />"); pw.println(" </g>"); pw.println("</svg>"); pw.close(); return sw.toString(); } } 32 NEW P3 svgsalamander current All issues@svgsalamander 20070401043732 www kitfox milestone 1 DEFECT 2007-04-01 04:27:25 issues@svgsalamander All Handle zipped SVG files kitfox 2007-04-01 04:27:25 SVG files that end in .svgz are zipped SVG. These files should be unizipped before interpretation. kitfox 2007-04-01 04:36:04 http://www.xml.com/pub/a/2002/01/23/svg/index.html?page=2 See the last example on this page. kitfox 2007-04-01 04:37:32 Created an attachment (id=6) SVG file in zipped form application/x-compressed 6 2007-04-01 04:37:31 SVG file in zipped form cubes_final.svgz 3 kitfox H4sICFfFQTwCA2N1YmVzX2ZpbmFsLnN2ZwDtWFtv2zYUfg+Q/3DKYsMKWOJF1MUXuWidYCuQpkXr eSiGPSg2Y2uRJUOi7WS/foek5cbusAHb2yAC1uE5JM9HfvxI2R69flwXsFN1k1dlSrjPCKhyXi3y cpmSvKm8JAn7Hievx5cXlxejF1cfJtMvH6+h2S3h489vb95NgHiU/hJMKL2aXsHn2Y+AWSi9viWX F3AsZKX1ZkDpfr/394Ff1Us6/UQFY5x+up54OMwzDuszafJQzM+Zv9ALAr+aPKMX17fTd9MvsNjW QERDxifRXVZsVeOQ2NAYT4ZDB+184NGp78WnPgRn7eKsnQ+BncE+qKdpvrbABpb5IoyksSEXibER D60f9UVgbCyDyNq+7BubyEhY249tP+zGrZVJbG0sMc6/hf28KfISgQkDPw7BD8308MmAA84Cxxpj P88abNzU+H+snE1onhXz99VCAWnsvM6a79QyL4Gsq22jKhSbaf7NCcroCPb5Qq9SEkXh5pHASuXL lU6JCJlxd7nav60eU2KgsQtgnADKdtBssrlKyaZWjap3FtTC6lwXamyU+KbM15lGaYMHk+2dgiu1 rspG1zY4oq7nYdhC3Tdjp9lR87S+qwrIFymZ4zgCjX4qEAuHVg9qAC+ZLUNwAc+uYGA2/hgyPPxe 5eUAl79TxZCM2/Mw2mR61Wa8z4sC8wW2DAkg4nvmcy56IvJFzAsR+iwQPS58mYQz9Hgkb1wPjEXJ zPX7g9C/BYhscflNEil7QYLSiRxA4DmAn0JMLWboxCy5OXR0oDPX/5+A5rY4IJus55IVzGdh7OFT HBPjgREnizlZrbx5Pv4r7oi67XEio4d9s06t5rqVE2fsu69qct7pVPu2tDs2gLIqFW4BbbMtjwJo CKBoyua+qtcpsdUi0+qHgJkz3wMuA1+Grwi0U0SlwyNK4GGwqtV9Sl46Gf1lEtbzYvHqmT4yK1sF 5rJLyff4xFm5Kw5dV8FIe/tgrK266OFycPGDMzy5jl3JtK7zu61Wt9kaWXki7qTiOGsxGR4tndVI 336lyttKv5nrHE/a8cBj17Z6IM5tEC7/3zAhZM+LWEcFUiGTnieTjgqkwutk8fyu6FThVNGdkJN7 M4g6KtrLouPCcRGLjosDFx0VJ18thOyoaF8iHRftV4uOiePrlHe/yI6v046LwwH5n/4GGdGl+zfO /O2KtT8BEeZyPhYWAAA= https://svgsalamander.dev.java.net/nonav/issues/showattachment.cgi/6/cubes_final.svgz 33 NEW P3 svgsalamander current All issues@svgsalamander 20070410051751 www barteo milestone 1 DEFECT 2007-04-10 05:17:51 issues@svgsalamander All NPE while loading SVG barteo 2007-04-10 05:17:51 The following SVG produces NPE while parsing: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/ SVG/1.1/DTD/svg11-tiny-flat.dtd"> <svg id="root" version="1.1" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 100 100" xml:space="preserve"> <defs> <set xlink:href="#root" attributeName="viewBox" attributeType="XML" to="5 5 95 95" begin="0s" dur="2s" repeatCount="indefinite" end="showElement.end+1s"/> </defs> </svg> Stack trace: java.lang.NullPointerException at com.kitfox.svg.SVGLoader.endElement(SVGLoader.java:239) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:180) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:788) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:377) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:433) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:387) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:343) at com.kitfox.svg.SVGUniverse.loadSVG(SVGUniverse.java:338) at [application code] svgsalamander-0~svn95.orig/svg-core/0000755000175000017500000000000011562044260016333 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/doc/0000755000175000017500000000000011562044246017104 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/doc/links.html.html0000755000175000017500000000033410607513153022055 0ustar moonmoon SVG Specification svgsalamander-0~svn95.orig/svg-core/lib/0000755000175000017500000000000011562044246017105 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/lib/include/0000755000175000017500000000000011562044246020530 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/lib/library/0000755000175000017500000000000011562044246020551 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/nbproject/0000755000175000017500000000000011562044246020325 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/nbproject/project.properties0000755000175000017500000000564411524225604024122 0ustar moonmoonannotation.processing.enabled=true annotation.processing.enabled.in.editor=false annotation.processing.run.all.processors=true application.title=svg-salamander-core application.vendor=kitfox build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated build.generated.sources.dir=${build.dir}/generated-sources # Only compile against the classpath explicitly listed here: build.sysclasspath=ignore build.test.classes.dir=${build.dir}/test/classes build.test.results.dir=${build.dir}/test/results debug.classpath=\ ${run.classpath} debug.test.classpath=\ ${run.test.classpath} # This directory is removed when the project is cleaned: dist.dir=dist dist.jar=${dist.dir}/svg-salamander-core.jar dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.ant.jar=..\\libraries\\ant.jar file.reference.javacc.jar=..\\libraries\\javacc.jar file.reference.main-java=src/main/java file.reference.main-res=src/main/res file.reference.svgsalamander-www=../www file.reference.test-java=src/test/java file.reference.test-res=src/test/res includes=** jar.compress=true javac.classpath=\ ${file.reference.ant.jar}:\ ${file.reference.javacc.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false javac.processorpath=\ ${javac.classpath} javac.source=1.4 javac.target=1.4 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir}:\ ${libs.junit.classpath}:\ ${libs.junit_4.classpath} javadoc.additionalparam= javadoc.author=false javadoc.encoding=${source.encoding} javadoc.noindex=false javadoc.nonavbar=false javadoc.notree=false javadoc.private=false javadoc.splitindex=true javadoc.use=true javadoc.version=false javadoc.windowtitle= jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api" jnlp.codebase.type=user jnlp.codebase.user=https://svgsalamander.dev.java.net/binaries/ jnlp.enabled=false jnlp.offline-allowed=true jnlp.signed=true main.class=com.kitfox.svg.app.SVGPlayer manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF platform.active=default_platform res.dir=${file.reference.main-res} run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} # Space-separated list of JVM arguments used when running the project # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value # or test-sys-prop.name=value to set system properties for unit tests): run.jvmargs= run.test.classpath=\ ${javac.test.classpath}:\ ${build.test.classes.dir} source.encoding=UTF-8 src.dir=${file.reference.main-java} src.java.dir=src\\gen\\java src.res.dir=src\\gen\\res src.www.dir=${file.reference.svgsalamander-www} test.res.dir=${file.reference.test-res} test.src.dir=${file.reference.test-java} svgsalamander-0~svn95.orig/svg-core/nbproject/project.xml0000755000175000017500000000176210761454267022536 0ustar moonmoon org.netbeans.modules.java.j2seproject svg-salamander-core 1.6.5 ..\libraries\nblibraries.properties svgsalamander-0~svn95.orig/svg-core/nbproject/genfiles.properties0000755000175000017500000000072111524225604024237 0ustar moonmoonbuild.xml.data.CRC32=16a7c89c build.xml.script.CRC32=91ddbaab build.xml.stylesheet.CRC32=be360661 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=478066e1 nbproject/build-impl.xml.script.CRC32=1ebb99f0 nbproject/build-impl.xml.stylesheet.CRC32=229523de@1.38.3.45 svgsalamander-0~svn95.orig/svg-core/nbproject/private/0000755000175000017500000000000011562044246021777 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/nbproject/build-impl.xml0000755000175000017500000015067311524225604023121 0ustar moonmoon Must set src.www.dir Must set src.dir Must set src.java.dir Must set src.res.dir Must set res.dir Must set test.src.dir Must set test.res.dir Must set build.dir Must set dist.dir Must set build.classes.dir Must set dist.javadoc.dir Must set build.test.classes.dir Must set build.test.results.dir Must set build.classes.excludes Must set dist.jar Must set javac.includes Must select some files in the IDE or set javac.includes To run this application from the command line without Ant, try: java -cp "${run.classpath.with.dist.jar}" ${main.class} To run this application from the command line without Ant, try: java -jar "${dist.jar.resolved}" To run this application from the command line without Ant, try: java -jar "${dist.jar.resolved}" Must select one file in the IDE or set run.class Must select one file in the IDE or set run.class Must select one file in the IDE or set debug.class Must select one file in the IDE or set debug.class Must set fix.includes Must select some files in the IDE or set javac.includes Some tests failed; see details above. Must select some files in the IDE or set test.includes Some tests failed; see details above. Must select one file in the IDE or set test.class Must select one file in the IDE or set applet.url Must select one file in the IDE or set applet.url svgsalamander-0~svn95.orig/svg-core/src/0000755000175000017500000000000011562044260017122 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/0000755000175000017500000000000011562044246020105 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/0000755000175000017500000000000011562044246021026 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/0000755000175000017500000000000011562044246021604 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/0000755000175000017500000000000011562044246023110 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/svg/0000755000175000017500000000000011562044246023707 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/svg/zip/0000755000175000017500000000000011562044246024511 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/svg/zip/ZipTestMain.java0000644000175000017500000000351510647433706027575 0ustar moonmoon/* * ZipTestMain.java * * Created on July 18, 2007, 12:44 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.svg.zip; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.zip.GZIPInputStream; /** * * @author kitfox */ public class ZipTestMain { /** Creates a new instance of ZipTestMain */ public ZipTestMain() throws IOException { URL url = ZipTestMain.class.getResource("/missing.svgz"); // URL url = ZipTestMain.class.getResource("/AdamTagletClasses.svg"); InputStream is = url.openStream(); BufferedInputStream bin = new BufferedInputStream(is); bin.mark(2); int b0 = bin.read(); int b1 = bin.read(); bin.reset(); InputStreamReader reader; //Check for gzip magic number if ((b1 << 8 | b0) == GZIPInputStream.GZIP_MAGIC) { GZIPInputStream iis = new GZIPInputStream(bin); reader = new InputStreamReader(iis); } else { //Plain text reader = new InputStreamReader(bin); } BufferedReader br = new BufferedReader(reader); for (String s = br.readLine(); s != null; s = br.readLine()) { System.err.println(s); } } /** * @param args the command line arguments */ public static void main(String[] args) { try { new ZipTestMain(); } catch (IOException ex) { ex.printStackTrace(); } } } svgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/salamander/0000755000175000017500000000000011562044246025217 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/salamander/javascript/0000755000175000017500000000000011562044246027365 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/java/com/kitfox/salamander/javascript/JSTest.java0000644000175000017500000000166010611460720031400 0ustar moonmoon/* * JSTest.java * * Created on April 16, 2007, 12:59 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.salamander.javascript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/ * * @author kitfox */ public class JSTest { /** Creates a new instance of JSTest */ public JSTest() { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine jsEngine = mgr.getEngineByName("JavaScript"); try { jsEngine.eval("print('Hello, world!')"); } catch (ScriptException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new JSTest(); } } svgsalamander-0~svn95.orig/svg-core/src/test/res/0000755000175000017500000000000011562044254020675 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/test/res/AdamTagletClasses.svg0000644000175000017500000001465410637417427024761 0ustar moonmoon ]> DigraphName net_walend_adamtaglet_AdamTaglet AdamTaglet com_sun_tools_doclets_internal_toolkit_taglets_Taglet com.sun.tools.doclets.internal.toolkit.taglets.Taglet com_sun_tools_doclets_internal_toolkit_taglets_Taglet->net_walend_adamtaglet_AdamTaglet net_walend_adamtaglet_ClassDiagramBuilder ClassDiagramBuilder net_walend_adamtaglet_ClassDiagramVisitor ClassDiagramVisitor net_walend_tographviz_ToGraphvizVisitor net.walend.tographviz.ToGraphvizVisitor net_walend_tographviz_ToGraphvizVisitor->net_walend_adamtaglet_ClassDiagramVisitor net_walend_adamtaglet_Relationship Relationship java_lang_Enum java.lang.Enum java_lang_Enum->net_walend_adamtaglet_Relationship java_lang_Comparable java.lang.Comparable java_lang_Comparable->java_lang_Enum java_io_Serializable java.io.Serializable java_io_Serializable->java_lang_Enum svgsalamander-0~svn95.orig/svg-core/src/test/res/bad_alias2.svg0000644000175000017500000004177410653423547023422 0ustar moonmoon ]> svgsalamander-0~svn95.orig/svg-core/src/test/res/bad_alias3.svg0000644000175000017500000161235510653423547023423 0ustar moonmoon ]> COMPRESSOR 1 CYLINDER 8501031 E W I T H O U T O I L E Q U A L I S A T I O N 25 .98 [ ] 98 3.85 [ ] 68 2.67 [ ] 109 4.29 [ ] 15 .60 [ ] 23 .90 [ ] 17 .67 [ ] 39 1.52 [ ] 118 4.65 [ ] 123 4.84 [ ] 68 2.68 [ ] 35° 263 10.34 [ ] 82 3.22 [ ] SUCTION D I S C H A R G E 142 5.59 [ ] 142 5.60 [ ] Ø 224 8.83 [ ] 333 13.12 [ ] Ø 31,75 1.25 [ ] 159 6.26 [ ] C O M P R E S S O R S MT/MTZ 18-3/4 MT/MTZ 22-3/4/6 MT/MTZ 28-3/4/6 S U C T I O N R O T A L O C K 1" D I S C H A R G E R O T A L O C K 1" P T C C R A N K C A S E H E A T E R S C H R A D E R 1/4" B O L T H M 8 - 4 0 G R O M M E T C O M P R E S S I O N N O T I N C L U D E D , A R O U N D 1 M M S I L E N T B L O C K svgsalamander-0~svn95.orig/svg-core/src/test/res/missing.svgz0000644000175000017500000003714010647433706023275 0ustar moonmoon }qgc`kFDɂZŁ5E_zuMOr{P7[[]]]]۫n>ݾڜ뫛w׷Swꚫ/t߾iA~q՟޾}}_]-__}/}Ϟ4d=ﮯ/=O߻owϖ_|qg 2cN??___[v]?L ƿq2f}o>wwϯ3_ @`x\^|7ϯiH}ͧaOz!ۛUwu//ϯۛ|5߾[HzwOj~q|Ǜĩ}&d_|5~\Տ _߾}ϋhӂ?Ygv hy̯><VN2'7_Le #Ej^6#\`kmrt\폟GaOpƝv^n:93/)X$q.]E]3gs|Q)^)xHЃ[I$ \;yбxM|ۨoPiMPrEe82BS)(WT֢zt-T:*L< =rE%ɡqH諥ni ^F5m4:ô 710lGhBOZ=< [OO:nK(WӮFI (=80^B?vl'ݲ'}8jݬee J;Qz3h*yq:Vjũ۠ <ERt ),eYE's(4IWTO,JxzTxJ-<(IlÅ,>=fZtƄơRy?%B?*ǧ܋׆%!9y}.VJXкi L.sr %(ubJoSX2&jWD$ꏢt>hkÖuTڤJ&QZ1ui[/QB=JK(diڃ9cڮWK2-ia*؋w&Sա3we6)$Ltx1!1: T7[!d5э%IMR;F|xeY l\Aj) )hzGWj(*i8LQN M, '+՘K>SUb Ad>8zW AVvDցƫzȄ5VjsϦO{EPF叢#Oٳ>_*Gާr}!yzR %R_(*[hDyKx c[LPjk'^%-qGN$]ѧ MѶ =&?[5У̍$>6תvR=j\*FSrh/H+X^kt_ꒆ5eII\>N{(N`gWm m!)NLW%TGRsI?^l??NG1uuRӦ"u\9QyI!֟\:#QQ֏㽹,S:IP˔Wt7DC)#҅JtWJ( I֐]uLz3?eh_bk>?% sKER[XNK@emI #ѨNu3kæJtc|'zgT=]2|uU&#+l1STa)j(\ͤc$> S9UrFl}>HW 5pмM,]p뱍 [ѿ+=m&67GLmϏ7xaTJkn1Bd0<ۢmk=ʒ( L4$m m<h&΅Ǔ 8SH'pxi>2l1 \8LsQs<.NĄ?ᶺ=Tϕ8ldXbH=UZ"eZnNmFl1ZӴ^1jȜs? q&>[,NJ26O 9ENx3-@(aƱ c,rc刏*!>Vg .Xv%pj}]/@F,.i`c 9FGE`ؚjlF;GAY/2AX+N0̵[9nʸpe9}&R#t9.\28@ T-+ikihXE-q.v--d4! _PcE>`e򠎞5cmئ^;H"QEW(NtDQeN462D`mkAs-5%X{לm!jDfߵi$9&PJNl!7YF`SDi;{s4v]C=@ !>*%!-t+|3gS$4 KʡK 3z0>YK=C-dMo܂y r?V 43{ƨzXP-sʃ:b=El6(xe9އ[ä^x~^"NUVfA }2sI4 '$Y|`W~@%| (|ZXŘPMIelZFk9mAX]t<(9y?ϕh39S`R$_t7Xdo)hzj=fuBT(PJoh25B'u8hWF`QqAQ])hQ3뱭7i~P"o/{ fPw SdTt`aTiDL/Q/Vl\?ϤGZ?l 3i > qf2d˩6 6ML@F#ꝥaJpqFw&96l $DpV۾ؘ"]Gh[ZHXF#á9B,\%С=Y#%ǾDL/Ql_(~>߾D/}!AZgEVڶHݺHަ=5 L30ڐdFMD4$v)s8UZN]\G"řA)|9{ZԼ*zrb!ykY%/CJLn~`r*0)\R7^mld[R;;-);nRP!p<]5٥|U)`=(r&kwClVYKm!b#zlnv*ɩHuQi+tz# b,=o`Ճ ZwT "% "`Wz܇f_(~~@y%"'2Mi.h&7z搇öҀ͌(0h;6Ќ?_Ӂ`U! vp#jį^^B_քVC~UzWHN<;WU zC%۝RCUP]jДt =YO17[_FT'T*Z`D (Y)N!is\L!qeqB&_fy \;'Mz96?P8{0*!M, 8#I=V1\o gԫْV:Ce."x)Wv_C92rb սRY:̇.lnuFUpII[b$_#c2iE W1bsǝ{[|qUA@_J z٧e$-M~Z HgץAehRlŶT[rZkW^MyJq5*$[*ƫ :t,簳t+RJ&ck.By6g^\wwHYKJZ1\UZhk2&/\]{Mcsq9H7deh z,CܢݹgFՂ]͊}=m{j9,PnLnP6}z݋Ŏ o/lιmS8OsXr zܹgjqN1 ThiU]q\)CQ6K13׍ w>-&p]K$nHfr%)Ϫ{2fΉx5FWxi0 MgoRf[Zw^֝ZO b1&1Ӷܗwbs2CN$-<)R{8gI4r- U|2&Z-_)67SU7J2K-'*Ӯ G4GdIe.7u*K}5*8A.١wzwDCG|J:bһL&d;d`ݙ#!.[ֺYK@%Xv}i?ֈsnǟ+lf74pIqVUͻe5NQ)m0utl,a%~orT;w<消퓲hl=n:0b\l,ye)-gF#(FhGfO;}`׼~ y|7py!S/.b[pl7uPoeUX) P c(=R)T*W>|*P\G(gmɭd-IxփŰԤ{=]#):s\4{爦Բ7O!?B o\aZ;\L~##G?R6ve5t%?Ƙ7ƈam%V!W\BƁتtêeeW) i;eܰrla(KI+8֯0oզK5k9@[{p0(໬Zа79qdpZ 3RCR$I 2mUX+:rhyC $ihX9k-HLV%lQ$fQfUy \Ս|*kI/C/⍊A*VqfU}cLB~r'U4:j%xPfWcߐjӋ<㊃f%U`/dȑ1t|9ٻB"d c-wvI~a۾H:F"4t[*#O[hu:he\ w:GznsPϽ~QpGh 5#sLJGAQ鐖-`;*TUO?9o.e:yOnKϛb( H, -uCOxZz1D=fH"ƅJk)vNTp*(,|F(Xa"[$nP5 13YuaI͎-0Tgk@0G ,[EХ%}&M+Y+McR=홺bit2'j^.OS~G߱Mi_Dy_ /ݣt8⪎#YVEmG6'e8NMA}XӐlrgqroXTBjΤVJՒݩB7ҷERGJAnt /t}67XCCP-\e{-#id Aq +AhW!dɌTn"H_Ԅba. |gH(P'7G s˷|B'e_b7KAzދ18^\Նi٤ai9)BIl3N49`I%p/gPڡzMГf>Hr$}&ƣS7@ڌ|)wܒ<*擤<$O4SI {F"ZZ-i\J.Wb/X'suJHդVDJSRz7N:ejq UOI&}ۇ1,jے뗕-D6t&*ڰ 8RrzBRSKlC/~r&R}vn'~Ҟ3+^TKgdC*C|lteS1ce@aQ˙~))mVSrݻˬҫv˷5OnE _'wYG=]4KOSMo/[upr#!28Y K2@aGoryRpV)vAa8kPMwOe_l𠃑kґKG4M2q57l`sVk ;m$ ei9,Ck @C ^A;7T G$vΉ`=Ao)TdQB= }PKZoPS6X5HϢ"-rU~LaEs =ԦYK s?2oi w7E9us.zzlVuc.1KC>҈a}F%sy8Z[}K}} zlbVcam1%)b JRJAZXt&Gݤ|/+v1saݩ[# ~*v`|CԽ4qfN|#G/kIdꬩR(WXB'fUf$H ,l; ~^Q* c9g;u)R'[&tpF/;əUG2]|#*!~1ȼ|֗Zֽh2JCSm^fN TTsw0-" JT+IddMZ[-A99HHH7ń@*&]j7ݼe6p4Uo7X$'Yet_RٕZN뻏IF7-s;_Z&Uhå < :'=U 9bneJ؂ǵb[?l7ONko`inɛ{{ٱ+i[ier$GZ2cٳҡ{SI,F6 5b y!-պ#U6L:`t>`DYbQ.Pn50` Mp|}QKds}ITX{Hxm БUR^{XG沌Rl#WC" + 5#R\WC]]; Bar-,ǗzCg ҙmf}}*tSD'+9E>Gʤ\ 31&!D@Cא -%A;fЃnas/Iti]244}ϑɠ`@Vt{1im< [eQXT9MwT  ݇~ɷԦ!zǿXbDH$6qi8Tnϒms,1GpP/ `-5,[L8Fseehy%T*;ð'?O/ s snC}Ie3K81yMܼg~+nᆏlvIiVDN^ت׋:6/.ě/b9xcUڨ[/Nĥ\Ŏ_~5_VP941GD|&?̖rcإNkmf|X_'(7ws:fa(n\ݦ@lYC|٩-c"as'7< ;%ڰ:/WgȈ~`L>;2 @p<w6բbDY!Ja{R-Ih9bk}v|I|ի+M[l/ziԭ*gZȕ9pX2C|4g9_AAmLY1SFnSjO_NWJ:]&Rm6 T 7^8qY625tЏ~qQ8qMR)_b;ӮA/u$ ibFI,;65a*}IhJUOsM&}]43x5eej/h@f*ӄgZqP]1xh}f| xJ@&N^M3e;?p=ȈLV͖OakɽC[Ie dZnWu])z /;ڮ>rwƼ1Mj]=sǪOrQ$vER}b~meSLYUƔguC*ӿϺa#^̰UYaQg]jǖ?Ʒ@:j ٥p$ u2-@ -/?]HT12c2 >9U1q FّÀGQ)cԁR:bk8f%xwBu@I)HQL6>fx֝KE=E ҂c8&s72#w`-ZKK)nx(5 qh-emٴ`rd GftCnLt.Θ7t+_:klkoD6>|rR8=c|P sIO$4nȏ6÷`u-.8ލj~@U@Pjх,S/uw̝܊g);n|* X>F$A6xƘar9n }t$ȵ&^6.AK)$xY{B6ޏo^\SBn\Kz\%Y|')c<ݳpЮQ̓{ZgI}QBG6f"Pw a =.\Fl="TwM\#g<0p껗VmrGY]aQ),XtM=R31YTNBW~U$V k7;  3{/T\yVKf8>`8 wꙏd:c3 Fq荒٪Eaƞ ^;*+(t ߃eڃ`BC)XSyEÞ[0^n؍fe$S{aN3RKՉ1rTر1QӌǼb-~uj?َw7ϯ?߾?}zq}ͧeL5b::f?e:! [hE\fi\ǽL)=Gg 0ty✋RC/9B }t zep_vqh誺0CReu@4va)m#}"  $i;>@_zx3?\MrdPiO'[dfn=ˀ1]lā1T BF/!`>>]`7ގv SЅX碎@)喸8xqN).*P@+mVp_ZV U$c1OÐ9X~’(04FXi]B'N?1.*L"-ΐ8F#M(&3(`eOୋhp4nr.y" P62OC|Ds8V]!BӧTCWoiC۫E PH\2t[l$Xq@(~|56)Pг S)"hye}wKve'0q'ЋsGI=..)) m3ÞdJ䜸oөg{Wa+>dCrb)HgD~;7Wn~tww_~Oƺٛ3U>6=\GG.Fqu{nvbij?dсώsvgsalamander-0~svn95.orig/svg-core/src/test/res/round_path.svg0000644000175000017500000000123610653423547023571 0ustar moonmoon ]> svgsalamander-0~svn95.orig/svg-core/src/test/res/data-uri-scheme-test-image.svg0000644000175000017500000001272111427227157026433 0ustar moonmoon ]> svgsalamander-0~svn95.orig/svg-core/src/test/res/Monitor.svg0000644000175000017500000001653711427227157023066 0ustar moonmoon svgsalamander-0~svn95.orig/svg-core/src/test/res/embed_image.svgz0000644000175000017500000013157610653423547024051 0ustar moonmoon q'&Ѓ5"Z0A$hp`HH# $ /sjVڕuW*+OO?}{Ó/>}PvO}~߿]z~Wgn'Ϟx>|/_6uP݇W|M~ vw^;v{?nٗ{=//z{O|w?}??{/ӯ^G~_GWO~?Gy 2J)Ͼ}:W<=X?/|o?yP={x]]=ST9C~}}ڃy@0wx䏿xv司O_~+w/|Og}/pG?5ʥow^<ɷ_owy{Wdw|^Wڽx/_=ygW/}=}v}{r-Ͽc*}=]GĪO>>7_}ݮ'-=}z>z^}ݓoӹ ?˧翼"NgO^қ^=x˗4}~wwߜU{~C^ݫ6IkeLJ&59;+f.wNC^:64G:vZ={9;c^[w&'pi˃cpZ]8c2te.E\u11:Ƥ]N4E_RQ R;tؽӆ~OdT.hF]Vtsw1w@gt<:c%&Q[=I]CC?ƽqt0Q1;=};ib ehD"KXKvք?ĥGbp̓cSvg:ҸE Yf/}m"]PT^; hK;!dyMzQ/;Zuū2],&1SpY^ә+^g)qGCtMzs{C\oAܬxSޞoϦ'`DHzk~OGgGO瓢һ3ć)'֎\.}Tq爱CvuWO SQDȟ D0By"jmU ?@MOY| \]]z{_$pa߈K,8H+G/8d>d#K|ъX#@ b2) l6;ta hzIrQ&DLlU&Qtpu ]y7o4]}6/= d*4.kgt0 : PVʊf &{ tBg]uy'klٌB:Pļe3gt1&$88Qc}K<ų+4Ue4^ L[QDXN*SzGQϖ3m ] 7{KwtfC Ak pUxh!ȑu$~Ipewt=ыJR?xdM}=|?ɘ\%V< mRU|tq;7 ]^O{tCG4Ut7f$.܆:8ʱ5B2Nj"R|1plIA!}GG;!/,f1{D;X t$%[D#Y=ٱërt g zSF!;l;.vNh +J"$Um E!v9=ctS)NB3: I%fşhJ{XΎIQmy~ ,E/-̞؛d <-7aCBi8#/#B'P,+2{\ F}xU 3=fa'dO.{Wu n!XaPdsH {wi-Vͳ^9>-_㫦jJx/_O痍?zG\bi"lGSU6 7LsӹpG|I9PcT&p i^A9ÁTȥ5%̴E 8Ap3l˷O-wΙP52vh3\ୱJ&MQ@4+ l=gwAAAATVFt =;K.G %)'B_pTd$0!_ZPdBc'%z%Bj%H@!]Ŗ#_hAծP>sr20ǏL9MD*%vݡY9AM{b4$a-TA D =^AYO6XiSJ;碢2Ui8D` f#gdWv>."OԣHۏ"A+pGX 9 |8;#DP#E hX &-m%I):=Iˌ3)=#}FcAs)N6L< T)MDwcLW9Ě fMGq] N3x<<{ /oddkgQsܚmTKV̲ɿ =,G, :H-"9)t(,ґy [ ,V26_Llm∃g,8j߲9m8lnLɠ:(wÌ1A# "h"R &#G,!̘ѕh5# 2햆c`{Y @R[E pОl!AgR?1MFD?srdgxC8zDE, 2OC q܂6"lC"w?!4"IYS EHD!DWędh(HO)=FhĄWȱ'rH@yHko4xD'8AgiOmO#y44#ɟvdeHij@GI ")Gb`#M@oȤFB$|#w_B"t'a GOFHX'r.T M_G\-bV3'NNA6fBEΊIl+ˬUDv YP vXG#ef0jĐ¹L7B}p4HEeT8X|$ ×lqXI&R;\bx̜[>ۓO~D7"!A"IJ:"4 : o8jJL ga 1XHuJt4]@j!:BW gR;ٗ fqd;2 <Ќ$`,P CM rh9kzsL@B^Sr7{%>;1PL)x'db4UVmy$XPqD44BE"DxOH/,Sϲmi16w $'#;|cGJ 8L=Gq$pa#@fH^˓$LJof$E-қf];\˗׵Щɒ \ȾFzv"L x8hejD 2L+\ J9sr<;C9>kCRS,"]T)-=H/~f;e1&QS>~v^ϻ\O2>E驷ʰ^Fjs!`9zlhDF&=}!|cUa9A !orHc9ڗstD.+f/#δj=#;`"@*qGj>!#%*:OGg 89xWLP*pr{dȥp",GgD h}tW.BW "7(X:˓F'(B%L n(?m|ƵN3$Uq$ACH8JρZ>_ >A^PCw9XIzq` $)YD{]Ai I` I'u µO2]%z\<1*r"ӉGdL%4$ZTS;!#9Df!( bV: @ħġQB#gJkb5v1 ID˅R9lYR`Kd> bZ# T sh4Yfl&9j % *@BdTH>Z!v*,KW!6x_sXUkS]/رT[ĥ<9T>XP*D-e#\;dxa%t'jbd9`[XZXkT MGy = TEХ|m984 X"Q-0a٣ H ( ,"" p e_Jg B *)WU= %aȵ>-?#bױxd3e-3%~,Eޥtj iJ{OI+gYX\z!Tޣsd ]/Z }CH97S5 &{e~ hר59WW |nwz T{^#̋\>/z0 G7^W,] ~mR1.svdЁd6ԍakGDYI¢/N/ e8҃f5GZ)yRǓHRp$?@X+s/Ƒx{ŵ>_@񉁰Dv('Hơ")fc*d! "kЦUz_Eh XԵ&6rQ13qPtۣڕ#.,Ek8.dQIG$ʬ,^,̀wH{ lM:ƥ0qD-aηEj+Pb9/頫z9!ۭ/L_w+XY4NE.#^c}v$ }$R284|u~ժjbD {/ ׆#8chxZNv@Z9R >Պ|t(VӤߣ vWTKVI"@B:E°$XPrGv˯xsM-N ls dqRsDVBPuf#Xs!|g_ Vv!~QHJ EwߑK;`/!C+(_зGrH9 v1\Dvd~W>ŷL˞\хz\Ւٰ끼0\-|larm-ƕUH~L1rS}˯pR5kٗE"¤>|Z&|aVbҥKbS!U7b?\ӧ8,w0G9;.RN\5 GIV 2@fb(_Q_](\[ Qiɟ^>}?ޡ Sacx &o߿↗^凟=ztƃ?| GBAe <L^@q8}—?O-O~?|G/ɧn'ӏ/NO^G_ŸOgo|Z Ef9`֐Wl`e)ўc^poui-NPZL`=Ն<{=ʉAY<Ͽz^!x)(V-^ Oz1uؘ gYdY/}'-}?ԛ~Ӆ|e|ӟӋWoE/?U9>*<~+n y[>grk/pš߮}?8=~Ǘk_~\ݾ3z/y`[CUf*%dujzly& 9KƴE_[{NlCi׌l<ʩ3+̧xO=tޞio*d ZYvCG4-"n |Ы'p҇9^[e0-WC[krI;dg= 6'1q4 m?5<#ڹ7 zW[H!QͰ[4>߼5< Dᔾy1=cHggQ׬r-n uOOhLϘlFL,'yZNq'tjc;5=!Tg lo\eyc\[=sYd?֬^hvE;`&T:ؒIVZߥ(+vDȞDg\9+lݭ3zH/Ռu^ %qAk7#p LAQ[.*ꞷQ[j{aFKmBvfq8í/0mq]Y~]2v_(v-$ wcFx1Mt=fpOM@T.+6o)Ɩyg;87Bz/k;X뽐H~KPB4˴ K= {1K@ꂸ :v%v0RNaHOqF50TT"V!ӰNÒpfD#o@-6OprfaST*1EOq''oC3;AnKzu~mjD;htiKX%5ϛATAzn: B=i ʳ-O(ݫj_xPy s<anfjQNm KVx;ÂRk0˵ghDvyBe-szθ<;Q_3^;ؿ;EJ,1%Ŷw/ #?ެթ y@4[YMըz NQ*Oi݋)o5;GRq3L ڝ9nu˕8YCŠg}{LIx=ɛpu?I6Jd-6T*1MOqK/ }[? -sLnWW૱1MaX]5: kMACNYX-q3/䲝HW6ԕ׼j65At; Q-604㖹ӌ{IH3I _zdmNp'S~{E? @o!%kw&Rfx}1s;ɿJHr,z\\ZwHruu8 h&5-"gڍ@Hԧnk Ww;7{qN1dḧh ns)P6o[m|u6IbmI;=i:_KM$ 'olc}d_YVnjEm-@5JmkULHv~SL"ЛM& -#`{KS7/9Ftn N~ ̧tIY}[Lp7" [[Em{QwW/M/d nD'`4LS4f){(}4R,o6-|:y I#t:6k3` >G%2j7O2I\I%S"t I+ήPD2[ 5lrRQ3' MzrCgpv)X}rNG=>(ch{HYmI[;)t 4*%?p5jmk}2-jL7M;Xv3DΜ-n7&Ѻe]4ԃ3j/13< ZK,nuCxHL6,J"3zk_n"ƍ6̸eNkquT&I_|y|ѧV/ucٟu[:~E!tPC6[b:CŢqS:f5toJV@vTλoPq-1zha;LC ["Z-Ž?؜6&V7|>x1-*鸺`fV\?%.-oK,P7i a{A`3KmIdOOu=B Upr3+ :j3A0ח醏QKWn f$bj2{ -2w=ag U,[P=Z!r x)%aMJfj觐$! a,m|E®å/ϯE҃-!́c@2fuݬJm|tqCX[I4>nI+Rline[yh.SlaǯyKPVꝐ\YBF`Urmj d& !-e,f[POF$AkW1[; k9Z>+ϾZd WfB^'u 랊5[,2 ;C ,}8vF뷄JHMfKHB"Bl$ 趄ZHr[Bp-|){IìTZ )NIn<*m+ֲqܦB` [²G=|?v:;C3c xw!8`Z.fϼS~!҇9=o'DwaWoF6ZS "ZiZM̕ҖEdqKDEDz!{lE%gVWu͆vkكKn˗ڜ .x+h[[ky[ "u-9sPaK.ZӜ!_ ˒IK-vDI76I5=r#c{8#wV!h;a߸!!" % Z/m im$Ba'඄V|xCHY7$g얐*F46Z MTz-$iokFzKHMut ͛Nwd7i:X7"7ԉKXSԦ/nNMv2BڔJvcjHǡuw^vd6Ҏ4J"sk% JyKH+u6E7+hhN[BZ1 bM_Z^ w[BZЁcT,u[ȑݑXo+c.\")njo1ŭ5!k}[őlTC>]2Dgz&sH][>mg7m1!p9 S6mh$uRZr(WpzC@+( )1<C!I-7$c ЈnƚZ ɜЗ2mV9}6E,-! z== VD{j[Hk3_c̖*7^ DMAܞ 9tvwR:8Fr͚[mZ;R$2lQ3_" !HǹLVņV]MR,9蓌AJ(Z?" i 6q@*BZuѬQq:m;H+.~v[^Z+ŠaS*q6fKH+S.CySHkIآ"JK9rBZ$OȲTrݕu^aR.{oieNݫta[{ijw-9$8rHJ{7 \ZK),J.鴹[\m6奕V7x)m*VFO7}o+W{>mXo75*WZpڃMqSHKo !9e@Z| 5-!CD6C.J䢅p.C0iS*|fVG^ID~)ySA6DHQ+Qc.ѝ+-!LAZi"ߔJCpd暸)VM\Bn;HkoE^o ieUXh hӦriu$869n |Įuެ_$Uv}`;e+g\A݋'x_/`n K\b; z=$D {92Gs_ZvA(Afwg4s_Z 'Ս1͍x?w5֯'#$}۽@ ܠ J P̕gt0V~7wB[hWH"5eM;w.gEa iL3\޶m&Ί<)Y|uN9' $C'A'"wId>' Lx&<'RvV0~IYd`gbm!Ib٠%YDvmJ<5\<.%8,A (i1a4?Q)N>Qናȃk'w_]uι$ǿ u93QE9(޵g{QiR}꩒Kw+SEs&SlDRs"Ree(2VWuwaW2- dq\X'Zf.M dBFxG.YQW&е=qpln4ob?j]br9' D DeamT6Mf0{fo{J :3qζ|Nb4O,3zvp8̾Ŀ/{Sfйc=UΊŒlF,b{5 {p9+ j3Yތ%Y-pgEaFKЦO30:k3p`v@zէsv,,E#]bNs (.ٓ03ΊՈ8bFbxs㳢0c/{D>ì }bv1xC!7b !asNl$f!Fr=ae10C4Z/ϪH)z #8^!JOg)m5HEh5̈'FEg!v åR]YQ202bG, /Lsp7ëa7pN9D@lxX\;V '|!ryT=+8c*v轑泲0O&EQh?a&^gOa0 lNx"ĞzDyXh[ -^.32ñXεgf| OU ?pP<I3"Cqf;#!7-{-)1Y|VTG\lл[m1\̣tg,tǥS|ehc-3f7 &N\k ;N!/(^̪˺pCˆZ3/jY6X*zL_l+ >+ qRQ"euK&S)@SMe5T8amm,@7 J'hwvg;ӂ$7$Re1r^M7aiSQs\H~ sp,ps=DQ4"\"wtg:ވY"-K0ŁYⓑXD%y`,zcK1aׂ-fjx] kD7#cyGl.4Ͷs+ آm526;ΦYN>+ 28f X B[B9,?5WA j/[Yvy؝f%._YcssǬI "f# gw!_"0nGV ^YG5*%<=ѕM60Ot0KhX\-/ d< LY&*yZϘU^Y1Q 0Ou(/ڄ9ry経 [Dt;T`xm9 ܷwsS8.^ΨԄWKi{41Lt}/>) q]V{ k] fansQc׼Uv\`ɍ>lƒ:C¥fH$/ãԺ(MZ\DJ.q3jJcՃjʶ-V9H,_+wZn+zgxʮЦZIV,v4ik1zW8vIM;d#W{s_vbY0gU? hg5%8c13O-{Hp YƃW^veg3BXMZwO^r\7Ṿ!fg,B+R8NE'-h J[aGƢwZ^j/F'9Hym'u]MZ=+\nno榥$6,b1:x`_ ðC9aj*HTy,鞝.RX+KrL%wn{rIOEhӲ5v9^") /.`''R}78yJ(h+gE!֡[fRn1^4A8&-1:y sbLH&B?Iė߂4_]I#ri򌸯[2#=dWHnO嵹ߧ4<8yb,ö›ö('E!l d[<ɶ9M|#^ΊBJuB0KFw8ă-z-O\!.H W ^`> yDΪ`.«8yiqdOG4ZZ\/ N,*~F,L"G=.YpSYGÓ+fێ h2!Uf B>4s!.$ED:*͈ cYӄxtNG^T 7f&n7ay mκN\hnY7C 䊁xɒfd@DV\Z΋㊉~bi',ȊI7qL$)&>VK8.aK p.!0!1Wsh'eBZқJl7wja>f0Lj,'%mI&DlGRC3!<8eHacdlsW;7 2R1細B5#rY#MݦbOMi(-y2 (yʃO\Ļ@C ^VǕѦlZ?,C^GDHJxh7;D0/k2sy  vd҅ͺMI.G8*XxY]_h]Z#v=ocͰ\9QW# "N[Iuq:x8wEvr=\0d,Aў2UK5\ߤZ!qk,WuT8?Xp@6͠8=Zc8ݖr#ZeF4Nː41Ŵt ii[Aoݿg7bDgw=ꈥU,YR7G5B]!qkϢ.ga4LFzZGeFg姾x H7!zdjVW <*#V0$Zer4?MUpdM{7vYu7,ju87LMU-.3Ջhum9)-t_QqbR-1̟ }]ru7 .F6=T;]?qqSi'!ODeF:)T +1: 0cHriE}7⦦_샋œۂԲ&X'E.,ŷnzвQ'&f(OZ2^^[ԝET`p8]t-8honD]<[Pp0]}ʣ{,E,QvB|qrϫX%:'%gޕ2 LYl! v\7G{%:~`i[|%&'P{LG-?qL2JiBX}k{~wW/<=_<iWo-Nǩc74e<0PsXUSi=T04~1l(6<n EnĀH?ӱ/d44WIǶc7ۜ/wCNX74N}X4ʆ1OxfaDqzxGԩ%?l޲N NOaB̶:3D`THz4NlIKC;Zkؐm(PZc^b 'pESwS 4fj\Ϛ$b1nT瘓p1ۇm1ݐtV0U݌9Ζ'rws+ccwe\Qh?nrywXafKص͘+R%U@6c28L@a50kTr7gea,n ,8x#_Y^ {:˓tF-c)pcYAO"p3&Ԍؘ N vF+ŵ3LQώ',d.ĐMfq4yn`Jo hs49H%se.O69i;l7qqiTVƾ2MwKnm;lq6ƨ-7l]RiB9: Ŝ }o 'tHSB3襺COeN\I\퉃F(h,n**Gq|1S/SYqnOgiʽ{ O;;fhS*SJR-#ǁby/ƭ!2{8^BiFmzJؾűK;DtٶZՎ.aGjuZJ/;ulQ*wO XWcxqƹPmpr7D_1x:]Z=Lc9zb߈P1;N"=Ia+cwS vθ ġ'3쉭.&K$P OttX3ٌpو[0ӹ7?03"OQ]d\TOlqh^E5^NǮ:Kc׎m9-9KtV#r2ˍ8իLt$Ufg:kd r +k#.jp^g׌ȝ`b46 m5Ա4CEZ4;+Ui+֞Br'hĵ9rZrgT^yi,3׉ (엲 Q\ߙγu5kؚ&N@="$צR7$'rӢ;0%s`^ڭJ`+o2~z}qy,dyɖ͋&yn~2U,δ/MKR8-&˼&1ƾ4f0'-H oXZ( 扵6F~^:.UF#NyڃP,SYn>:ZTKQvKZiSg6hsk+$孳qfpW={aI+v|r>z>v$2utWu/N7O տll.ƾxؕ'ި|Կz78ft7%$I(;Y!= V ¨ LcVԂӱ }evo?}peb ɤ1w{ϒ5, v;]CISrNNdZvTz!0͏`0nFiq1mS_ƎǞa'q]jD-6r?c8yxLL;;Cd* a yT5/:[9x^UNcc>n^tyyOCE0}sl \U֥֑ӯo$ȴh] y4̳ӧE%1d%E7˵R5n֠+m hrB;}kkyUK[jӆְ"3&nrdV2m +\[[j}1luUfZ[j7ISnqs'XԺ{u^zpilj)e5?q;a]Dq("*(8u!8!c/(y-aZ~Qr_]TXTH +"-&b=|78PXY%ZyZaGdŵ,ŘG8J)iq&p(/Uf؍18=/7Kù{^uF$`ynLdB-(,. sę vŪ eY^ilc[|?Mc1jt0ޮU,9t١-Et<.72l_g#jj2Q어obX䴄5ϏY [F]-jx6gwFu97m^tԦ.] 沠0̩h5#y+{Yc#'"BTxϞb6r1Oa ?6%W<9ts "W,]"zpΘd?v\a:^gw_)ܝXrU-k^ک4/Pn'2-(pdUᇻB^s'(0! _Xͬ4fb-4>ߒt+koJƤ0ےnX\ |f7$A̐ 1a2߆1&z/3"!Օ0@ku,%x%r8l QwΓS BkN"G\[J[JhMer2g&o*ϖ<'`o)gRF@Fq[mFXhoL+曑m s[hw[q1qLDfy|CFM%s]3f2}gVg~^;|_a%eƋ}r΄of[xVx〓0'N ^9 ^2wcc ]H_Yu<"gT:}0 ]2{|1IE6{\tوIKC73;mKߎ⊽p\`!}a7쁹ػfذgxq.p5:ՂbPĞ^ɽ6t@(!W_ČSyސ @=3 1opwB (j1X &(0-ph*̈#NT-0aߪdwCG>2X-uLn.29c|Pq(Z-b;@\}}s*~F:r2\8|f*KBDdϏA/"Ʌt2QF8V|+63hX9C_afQ@#.M]u*Nmuq=@|?y/^d.J{ x /Ɇ77#IHq]w 3!/d? {9 S~qH\A8#3=Udf^jd3ʹ559$/u9..F{np睆>>aA KkgۆvQޮcl#k5x͖ݾѰ<D=zNX@C s,,μʽv\]Y19kt>c?ݑHKO[p+ !8$=0g$#$O0,3$W<ɥ!( Ld5@۹9l$ ?-2A_RVLPJLZih}m}ZWhqG&[P<ǬҔ O<1NGwxcHQ%MR,Be:HxYʒPw9ojX4dxט[x2 .j3'*¾9*Hh~ +Tr8I{(rf!=[ivYt{娌nB[n1*uMO<xVFP/+xX $4W~mr\]Hv!XS-XEcӣe #q@ zg}Dmawo8ɱ?ÒCȺwP>`Bo V-x`Wa!]η^kFˏBY8S=s薕=]ԑ,XZB VƁU}ot*Hk7oEmrtx .PA~~Tezuz5XE_=ngE"ClZ}y .SհoȑuMPSn^]Hʣ^Ij F|Y[($?y[HVE?s%P0;u̅% KLK\SY1#1CŌJS*<"Rojִ`o\C)tUN] %Ĺ-'x*Aj7<'ỞgС4tA_6H97l'G0T ^.Socnb/x?ISub娰)'gpuNzK˼0BNH֩G* tZGeGfܝ;*Lp& !G2u!uja=u$:(fT,)ttfE`*N~ : YԐwh\ Ȼԕ/|s>%I>BuX5[;m7.[ϡzݯS:iPJP;`$*_&˶]a+y#<ƩBͣKW]\M6O#)rXHE7%܁np'‚MY͉~_:΁mT*p'/UܓY.R}U+(=^`.%^]N].ZTRwI.ח[Fc&^cӘrwkwM\jM4aP :tdYxyyA,8]3"lYlǍC-VLeAxBaѨ!eHnBM<ՔijcX;"~˦+v@4-nAu)Y13B)y/T-ɲ4#p㠌a}^$ I$xp U4_PJvGyƴ0Mh0$EwXsU8XfK\RЦmב.`~ 0/k&/{;M[P{[i˧vF#abnDCa 5NZ [N&+ê,:nlҸt2˗Evxx5eYUW&1R%" 1EqYhiHBG, _мǚN?Ix0κ%@c1Rg7HC 3I<(͇̀cjHloG"S\*[SGPBQVd \QYj OzH\&|p"]^1 z#sĥ+khzVa#zD4M88bUh^Um{ |U]ṃ޿n)KRGs_w-TEAj<&qKHᥥqڵSI 5$eFd|o$x!ۅ-PP`Kd!f]EYHw yt:#Amp7UQ3q<\ٕ]!)$甧o|X>HسW->=G?:} h0'l?bQ$`5}D6M@1Bl~_5g6a1֤YTyIzQ IAo~;*;`X>o~c>L7oQM7ѼO{Rm{mcۃ=lKBSI?T_ݠyO_4pCS؋bvpCt?f)e2/^eq=>h[aq[X4G+T2~w5%4=t'p)G3\$}DV.\ :o`kr* :R{5Xwh>O-;N:!V8Rl"`ӭK \jC@,up|kPDHq/fL'&"ޙX;f$ڳ>Kh?wӜ7U]2K8QkJ_WW5`D>K P>jS| ̺bY\ aǀkEDVU~kQv׼pӶE|S҇Iߑ`z6 7byFF k_haFKwjpK_'./ [In.f͢ J4"џS%AAz2yl+'6l#qǾ]:;9G:׬!ix#Hѐ,sI:sj-M1ZoѼ/p8)$GqڼPQq퍁f(3^gR%&܀UYmx,[kIGT9_yN,lrǐ˺M[\1xs?P}&hd".ux^?g7}>uaevi뢽_1|F"yѣZ@(yr(=(=qؖ1AN^t\pH)SSQt.gb[唉Ԧ$s{^DnщA. | 逿(J]t@ 27eż"{yl9^ZS\A'jjLO&>uO 8$d$gTǎ;x2ݳ` pjOݯz|]nG){92[ML?ͷlWeV=:qo|Kq7QJex<^BޢjI( ߶^4EKV٪ is‰C#(0rTX8YDO+! s%,?WRh(:2XZ˝3 )BL܉Q.kY$47FvUKRA`1&/78;jwK7c#MҚقٸkל>D9)! s&H{T[/5F[ 69?OK. ~7:CMޯI~#j25!Q`%Jj]$y |nTdύDuD"?=nC^O4V<1 VR 'Y\bY{@h3c0鴚}G;?i:4mQ>FiI5/z{jc4꽚'u |<+ԱqNJI=x_;:;Tv͔kDa:?0H] T d=՘m8o\#.KD 3"0@ڏ ˀeHZ-"WT:HAרgH/oRW. KQXr&vPw@&!@ ?%:!5xL Sf$kW9ĕ 4. &CY#*D޺-Q0gǚj&uE/ J ?daLA%- (A%O/) ZCΈ$3,psƕK1h!w2w=3yu[R+M'K-9ܑxM:<'\ C+p,L?$+5(d,v^(47 .3[vy^$,KLH%6գ>k*~B;B滅K&ea-̃_f?.:r!DD31gq} K6qDW`#qŤp01t&a.IQ6S#)w8 oAv >XqѢPyg!&`[ق{)R쏾8V˜ڄ+cEIqnny^˄#z띆i_dQDrZ־ޔ]RN#+MNJ4)q( ͻc'YNAgk=[ o RC7M[Ⱊo[M&cmgˆ skAp-Z#rUՍhѠKrĩmPf Ih{4^<ȧlCb$z.%5A\ƹ2_{|ۻ\Ò=itpg>Pu$|FjUr)D!vae4RI/ap 7)Y`GJU)f%rywt L@(U}T We[dܧ鿿p+uR'{\FAwy[>-Nkxώ+T|Λ`6uеRF.I!DێAjCc%E*1]nVF]89l/I lкm31l5azFNҜ(jc'=&^ڝ3Oh_ 0>khS7wd*0]`6YҶop]Pd4bC>V#(W\0@o IPK;A&'շ$PP9A(w?ʧ>M' @٘"*Buk,:K8$0wmB 4_ưqϧFkfaٷq\R۬up]o'A̦5 pC3Ț#4)>IR]%͞x*EY~6rxb\d(j&Q%wk.{ i1%ƽ˅jMF:dpf&M%Gc y%InS{N|CiIxnmY0A uTEU yJFɂ*y30I0`i7 rfnVQCB#z{K )5:ߟ+O ܍.pNn3ɜgs={Ь"{|- 9fcQxͣ >c`iNl}r}z.ΫWylͤNlle3Ӯ K$P`)tnACՒq|[DOMmsrc!mk9$9ֽԌO`k@tzR'aahw/X B":yܚ:-f[Kia UasC.eɚjh0o;5-ܕl㑃+ݞܛkp:tɦ SJBz@{MeA0M88*AО$^&X$^8Co=eh&֗j,F?izOw|q72n2p7Bo=cZgnSQ ' .j a:8F0<$wN.jܗN6s \3 GUPL໡*U(,Tli;&ggw) 5*.e -V*LRVqwڇpyAitE&cFRo:x\ A@M:m_P#SOhO1<ᅗfQ>2;^"scbb& tB`BÆGU{\lϕ4Ķ!;ܐNd,pStYզ>\ QIm€xNBT५/k9`hIGEhxakB4$":Ӓ/ +D%$!TΨ r曈-'0T4f>6-Z*!_P.h5: _aP>RD[Vڭ.l`*7;^}y;)Y ecYⳉdJ J[WzZ-k˭ػE2vW7~=bʈν }YV,R[ Qi&В(McitiN |9{hx;F"􋆿X/>=,RX( p[ֹt뜛?Y.3w5wegp\©});O3l,CL%g/!˅"tm 3j5Y1=Oc9+66s"~ěv.N݅ bwC+4ز fWtxy SMe3 OwNhmOՈF!ʍr[*k놴#ZV 1"D/*OT6l,$==ek-ݻgau{UqnpQcTS:ׁ/ކY]'9N%YZCcrIw3D;đĔnMq GbWc8Ưy R?%t7xIc}BRmEmD SDpP%a=.ؘ,$^cSvOfF4/5l:E)ʻ~TTΙB&,<='gW 瞒b;z<1GJb1U\ >O1%p9!#I*G|[ iJm>0 څ" 2peS@tM ᚝ߤnz߭Ru# ,࢜]|IDT [sxFՕGAR Ame*S; Ksg8 2G8 rJ箌 i٪q0Ѥf4je ϖ&bcmӨ[9 _C<IB %[']H#5C(*Edq+SN>SÙ=Lވg4v`sg/p{k ܍א)u7ūP[4x':xwW)*y( ?M"ߔ\ӊf].w3u򁡤h#Ozs6!&xz.g e u`˧h ѸE_o|jEP# jIv+[t6'<SjmlFdȂQnu9>hn46QXzꓷIa[ft8 >jTǃi9F4 y5c狀 HR_"O)vqRXDTd9( Xra6&զ6զǩs]mNAȢe*S㈱uja1wy0 +w 6O<gz*<>uHyM&qPx(S7wQ]nh{ݯUtDvP'c*tBhT[i)~4~NǛb{鬽0OmoXU-F{@ʻp uX~FJ3;Y w]o01"Ni7I6chߖݲR8M+{[ NBҵ;t0ہk|DՓqp3W43 cK#/=rͺgQI0.pp@ 𩞒¾&wds&U05EO~ ꯏT_uͻ[Qu)CѼ {Te3zC*6TGgT8mK~ K{,lk?Ox<}iom ,>Qnc]{1*MA,kO] [}#Î.x΃Y]W >e^:AC~t_wXuZ k<X% ;ZM6$dXyI;ɨ<w^$h M2M%ҔLWN4(Lip5Rq)CL7JhX#]) "8(8)`dGN{rTR!g͎ c&Up؏}~1alez4=pBcE` ķko҅Vl:“o*t7qV#"Ӏ s0m"K,^puKM:ǀ18Z&rN׀NfKJ2M9pS^߬̇D!3_]If"m_!sɔK,0ZzhzrQQ}lFuAF 3Ϸwp78ꦌ&#L Q 4Wg<]YZP@_JA /GO1 6JJJjxzAؕЍokHT%D3 W[- uy;&I n>7(fX+Kp;ZMzTT}sE׾6ƏfH%1 dbm̨ldd?RFFQ`yk2sU xy:8 D{K>wǜpy6gl.^ͷ{{od.a]8/X]^u$e6^R6Y61"6Ef5/Z-oʀQ 9٣-xasf ,qr7Q %$+=QF)s\ Li4䫷`;}8΁_ ~^x65jQڗn>b#|;OAQjO0Hn!6.EݐL46 NpAnTh& RYX5, fTPc:7M͢v m$aMK"ђ_93Pl7p!o/jJ:" +/ a[6!F?opОtB I\c@^Ϭ`V5H="KXRHXbhbx <ҋ:Fi JYp#') Ua  ksV+(wYN Z[,\b3UX,ZrE|o7I,R|%Hؕ6.0h&, EYXfUQ9T81| mm>(DmlY2,8w8X1en?z#ѹ%փ1H>gEkEP^6ZHqYBMFJsR]#v)M45ߍvA`H^u1ע bZ GXgTaGƦa 5D"KZ`F9.{F&gLd g ( - oxoLp?@"=qPG;qxy 7Bkl4GCMl\qiM aۛ6,acsr09wnVotoS"jA˲zgPO^l.wzZgsCޛRtxaf*ý x].NRD+$bջ ';jx*?UmD4.&ŝ%oⴗqb.zG-/Z.([cѢ+1,#Z49 20xu氬-5Fearp0n-hVy~w'gP394aƚЋ1 ŸD|^ _fApmĞ Ke=+}Ѻa ͙+OHMf )btX(T՗ hw=ڻ7#G.*J|^x]ep[ɅA\n2 q׮☯Xk (R!e%J\8j 8{<& SμT.1gv)lNlU35"ɄA G4jEA'Vgٸ!N4㭄kx]$h75Wsm=kC@o넶'%4j6RN2=q=RGT^6_[_{<#&b}xV7Ui8⣒~6ZB"X[N*Փq^n1oa;);x 99J'ђ݌Ns1m+-$ZҮOhG}h95#$T8L1}G>o8{,쯠|86Giv@ތu)xF4hM, <#HCԍe;#gpQAOgu7>K7Z;1qzֈ72\Lo?}؞*eMk'SGkW{#A@o5{2$E?5s6o+ϯ'@,Z#)!-El/~iIeA^ OQ[;l;?U%зBdծ&[%=qbj[2m)7ǚa:pc.N%ϣX><|'r E-˿"ÆgN_w?eE1y>8Uy/>ki8?W(;'/ ]> 12 14 11 N 2 1 L1 svgsalamander-0~svn95.orig/svg-core/src/test/res/drawing.svg0000644000175000017500000267712511427227157023102 0ustar moonmoon ]> A P P R O B A T I O N M A T I E R E : P A R D A T E T o l . g e n : E c h : IND M O D I F I C A T I O N S C e p l a n e s t l a p r o p r i e t e d e D a n f o s s C o m m e r c i a l C o m p r e s s o r s , t o u t e c o p i e o u c o m m u n i c a t i o n a d e s t i e r s e s t i n t e r d i t e s a n s a u t o r i s a t i o n . T h i s d r a w i n g i s p r o p r i e t a r y a n d s h a l l n o t b e c o p i e d o r i t s c o n t e n t s d i s c l o s e d t o o u t s i d e p a r t i e s w i t h o u t t h e w r i t t e n c o n s e n t o f D a n f o s s C o m m e r c i a l C o m p r e s s o r s 3D 518 20.40 [ ] 99 3.91 [ ] 95 3.75 [ ] 125 4.92 [ ] 233 9.18 [ ] 246 9.70 [ ] 246 9.70 [ ] 210 8.28 [ ] 209 8.24 [ ] 205 8.07 [ ] 155 6.10 [ ] 117 4.61 [ ] Ø 352 13.85 [ ] 98 3.84 [ ] 232 9.12 [ ] 15° 15° 15° 19 .75 [ ] 30 1.19 [ ] 8504010 A1 1/2 - D a n f o s s C o m m e r c i a l C o m p r e s s o r s B . P . 3 3 1 F - 0 1 6 0 3 T r e v o u x F r a n c e T e l . : F a x : + 3 3 ( 0 ) 4 7 4 0 0 2 8 2 9 + 3 3 ( 0 ) 4 7 4 0 0 5 2 4 4 4 C Y L I N D R E S / V E / B A S S E 4 C y l i n d e r s / V E / L o w E ADA 23/06/05 J B V DC 1020861 / 1050271 / 1050272 C O M P R E S S O R S M T / M T Z 1 0 0 - 3 / 4 / 6 / 7 / 9 M T / M T Z 1 2 5 - 3 / 4 / 6 / 7 / 9 L T Z 8 8 - 3 / 4 / 6 / 7 / 9 L T Z 1 0 0 - 3 / 4 / 6 / 7 / 9 N T Z 2 7 1 - 3 / 4 N T Z 2 1 5 - 3 / 4 V T Z 1 7 1 - G / H V T Z 2 1 5 - G / H O I L E Q U A L I S A T I O N 3 / 8 " T H R E A D E D O I L S I G H T G L A S S S C H R A D E R 1 / 4 " S U C T I O N R O T A L O C K 1 " 3 / 4 D I S C H A R G E R O T A L O C K 1 " 1 / 4 P T C C R A N K C A S E H E A T E R B O L T H M 1 2 - 5 0 G R O M M E T C O M P R E S S I O N N O T I N C L U D E D A R O U N D 1 M M S I L E N T B L O C svgsalamander-0~svn95.orig/svg-core/src/test/res/1C2EC147.png0000644000175000017500000013661011427227157022410 0ustar moonmoonPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxْ$Ir% 6=\*UНA? T&5yi.BDUfDይ*¦fKHŠt7S_k4/_`7k_k _ko_{`7k_k _ko_{`7k_k _ko_{`7k_k _ko_{`7k_k쯟ߞ?>_'rY#>_맙 B(`Ӹ !f_>~(*_ <`5@]~b8 Jbo/ F )=`}֫ M9 _އʲs*~*g?D OQ?QOp4 eLOH 7=c S289=?j@pq0S2 #e< R3k?87qXP}YPi}}#*xg)}G? )4l>c(={H')gχ~t} 9*|p8 Fʏ]  WVXE{&3 dM Y14φp? $xFs/~~횒#=YNx\4vtyߗI x? »(Pc̖ F!`/$ٽw0JhQs>|.7>$\uKՏMǴ57p>XܓS4\K~·x7x' h0wl#<[(#_ʳKs' 5 1xB\"K#Hl = ]_DT 8|كRzKJŽՑ/1  {4M@qi/k4?JQ앆|6 k:FI R+kma~C\@cD{p}ErO #op~ i~8<'ruǙ#tmў|JUgziKqX$y@J55q7RѮzGM\"ZF6g*N6C6a8ҢMBD} U$bZ{gvvD6 k3 y(?vP=#`>V҅T=Xa>ys ,ϝ?R⬹"rh;bAR|,o44+܃ɔ}.!G݀ +ac|08&^'4ĥ?w p6@Z)>4\>G#w0"zG8 z|/q 'dPω=a[%6l `/?@TъjUpOD-hNIV=Јԇ ej0D`cO | vsWg1\e #V<⻒ȣ_cpvǍUMy0L pk`9e#M'Bw9Pu6p6a>$NE ckQxDﯯs8Q; yybJu@ƺ.82A;~nLeҘSx4s ?" `e"0Lw >>/5XJw{Ha#7"ZTpf'-^΃᪢DH@  z"#;`"Xs  p=@F6z 8@D6X˺v  ac^= }{jD4wF!C]58'P9۲u#3P>CQ~x:^0=c=dtwI8Bxš\+nKUwڋz.Ey&=Q>  3*U@@ {kA AĔ+qR8qc84/a}~}{ 2yw!ק;`Tój%]`z c@1Tߥn<$ڂKԓ۰n+\J5(]{z5)=$ײ<2)G4y5WdFI!|w<#3!H:s >)G1KTgWX>u nUɁBn]|V*mM.]l~gJq"N.8FCoy_r i`= ϖ\qoBxp׿=$?j8kCH6y0Di@_Ro5@;#"_>}b N$]\Us޹<y6+ 2? iT :@@ylG.+B"hSH#Cq @ V*J (mlү~ٵ݄0$=ރhHHez=]nEM]qHs")pn+I1uRR}RS.)ȣZMd勉 /N7UҢC- 0b jt[AI6 ;.=a3ߵ{N3dnⶽ0 ?@]+#YAJM3Ix,|Y c0%jSi@Jl'3Z(⠥ ͆!W1T1S,#q6V@h_~wqfv_3J8d%D&-%"ޫ:E 9PZQD(!w@zn)$olXā2)qHD-SP=} fƘ~GG O;+#tW4-ᑺSLL2ɆCL^L_ԁ0&.@G(b,%=VkE$"hdΈjDU8h:.ьs.t?͘Ȭ.]U!"CnR4 ,֍D"ep.GX]_eh}WfefVC0*So'\bȅQF1>!"Nމ #W-*)y . g@Qp_b::Cf)Vs|{6|xzy$*/s/t@-Qǘ+߅{繊fխ+>`dU Q'R-=JxoEm)I ;ǙZG7 N`6|%Q{.ƣD`~}?$Wi4J-0o > zzu"Q Fh'{z`Rx -c Ӕߢ!GF=)Iߢ##]ЊMB8؆0P3>꿾=D+O-izhˎIJ:{8.U0w Z.eta<Rg>HD;A"ORM[ՉA-!8ɚ(OL[ jb.(ƛY?Hg<|w`ˑZ]7hy^aGfKR"d~`{޹:һ:ވ uT:[% l.*^%\0m+/rCH;d m ;S'# c\ۦ畷=/^p϶iZm9 YtpіGU'h%⮈kc &F Q>ܬ0)1C-FpsܗʫbeuQ#mօf-mtF*4J,X 7rH߳g;` Pv'l/V}[niM$׈["e{C]gƬp!oQ{@37 C.ldK ,5p) D&*7%Q܇CR%r / /&INݻ-)fMY4%12Q5suˬ lQ_FoU0*~P~(d #"Q>C[E `Jw^hvҩw Ku3}?J÷47 ņV.C8Zwh=󥵥>m L7<#ѧ0PsFڂn>z\zvdʸ}ڒg{$E~z< !23A#B c_KDkKxeT i;"pA7q H=s`IBnج , \ "+eEҧaO1>#A SsgnE"!ӕtL}~櫞 0$Z ]@+6I3T AF@&"6Dsf+#8ݳȋ}l2ܯgseDw01ɺTSJuӐK5vm^asX?`ͯo»6\5@ӿ(vRm!`EpP6csc csh!,KTJ-Kr7 9yxYQ5ªhIz·zܚ ;kvRQ/̝s34݈}8]f5hX[h-CP Ȃ![) "OQ zqrڨߪжb!+W64 H况4D@ ԧ 4pvOە st߁ 􅽽WUy CW侵rbE{* c{@AJQpPtB7]:DtԶ.검%?i26"6`cYQն ait$Yku^=%M3"QrdB/B!i3"W#=wb!TުT$Z);2WN,%slbFqMᬥ:%أ-;Z ǹ`ueE:V=zn@#v6>Z-G8юxHcКw% Y;ЕuQ 4||M[` ,SE2$ePXmS%IE囂N[{ nIBubuܛec] Uz-%7&ϟ\(!&PneZDPxυ)0::WQqa[f꽖 P&*yp:\hʄ'Mvlt>s>KԈob!GyFWw80*وo:ܗjj́l)L.p<iF_Kہ7&Fihdl5nic˨or ToD0DsSg؆Dh3o fۨ&ۆls!2a?ZtRLHu`>ɖJ@WcLm FB\y`õHm^X!2D^r1;X`Ǽ\cxA/_LC Yw9a-7$em?p= ?p|ڄ uk 4'[rp7yI㒙FEXت{YvD"aGX_YzWNnL4'pWR= ڟZ{ѱowc ɳLw) nۨV.dV8p UzS huA4TLxjsz&TZ-$Th5iT_Ue Z^b`=D*Оx׷&螁J ybhp4LyemiM|$Bw 9r8x+ u݃C{A[ܒw,66"i7 )|0R\!_ 1c6asӶvMQO%`8=Ìd 0J afm ]p*t\ӊPp#/勉 /L7!ht kQ.xuDf?<=EO<ɀW .g:pR9$!vnefB}>F^7*S0f=`ڿA+V*O`TJ=P/_Lb 3]FFFn:|φ$ \ .(`$9"k#1گgDHLG-6yM fQ |s׈w}ڳ~Q Ȱh XWjEo%Hwކ냿 ]4S6\|Eۄqj|(U%ϕD ZhG[@`y+C榘pͰ+`MW8FjlSVD4 VFBUg % Yۘ`wmV=EfCb3sN'P6̲r9!&&w1RUw^an9 t`مLѐ`xHɨ.B8} `@68v4{=g EM<:@+D,KYo^Li0 QHw ~/ooC*q ̷uاYS8rnwn 1gv3SUئK ײa`ib_kjn3?V3/}q %L_y+ceF\+D'{!B.ē&[ ׻exHTVG4C2^[hD# sinyRRQ8 xp@l/0`i 33[3!wbG%_1 \H),`I3 j{\^چ|zoCZSU W7Tc0S GbgᕊF65oQlNUAGfS({% e]yJYPieW.svw45fF &=ёSz`p,lVU4TGX)62G@SbF ÌySjѱ>q4h;BJj8At),ybf??mGFNu lA9u\@ $\PXFMڊ1 OQ]E\Q3e̜eS3wA޸q&%I *:IlĚqStYi 4 1Xi6Xjʩ !^G]nP!ofHʶ{Rb 3g=$Yj]MmH6QS «U0AFILt W}P%6(g='!b0C.u'd 3 5+ {,y {K6'>7ڳKwQCMِp4*MiQ]tD66:>ƜYc>}֑K^_g{M * h nnBg~ #ݐ 7mfM @64/_9LG=^K&Qp o}YjZ='7%_]P~~>_uy d<k;efjTV(˽Slb Z5 $t[{}Ů!95FR'CPO,xUy N3u7kK뮛(5БCPWކyI whrPDUAƘƴ f`ITXYDa:]勉U96 +@Jf,OFg n JٜV{frS>7D(IB]ߖ Y3)3e@i{-'EzRuԒLjW2V .ȏ 0=x>mEۢ>.bx)1-\1$e鏙1J Ě9U1gcMHo݆zm``V{bk=>)Kk(Wpn;c_ W?_~¼S (єͤ4Lpw [3e ;f C.e7,3ބ?#R˞O%VjiS`Vc+[Lj T.bHa KQf'aûU6@  {ձ8+=Hdt'Лt ZZJiRV"B<˥b nn\iZDr?[ꇧ3c[53EC034@s `:fvg+_rf|p{TE'5 ba;<\33aKDD:Qѣ3ђl6M('Z q  [`1i̝#"Te9I %`InպGkZ"HKLaF59=$IqBM 1p ZBT:5 c,<tl82h:VW)QFle| Q ]-hm\z1.YI̩? ptjDX4VtH/> *֑?a_gK֧@賯lʺ*P?YmL3#Q 0I,gwI8^͋/02vY$9H-24=+ v|tp)O !rd&蜒 niYhZ&JVQ&d 0g Uo++xl5Rfv]OW]*~2+|(ՋeL:``;PL~ IyMTh |2⮃<;>o\2h9ZoݴKK8<;Q=KIbRNwi]ʚf#r"!Z:sb PTTٲk4& 9h#WҠEw&Slj,fIgeOa 7nr,"K9ԁHQŧOcV;Y 14Bpr;l5UYy_}κh7Jݱ (#KYRs/= ᪤W aw*#q3aS^ ap*,W<רn zE60 ߝ)%qm1X1I-=I-= \?VbDaԀZ1ȯ&h{&QlZ54H- *ug"n^z,py آj+7 V߸eY7*mR1sb-Cyڷ&K32%SZ!tK0]^/"xi ̂#]NU1}l:uE]Xhׇ Dtd "AWЇpwյuh<&u(D'|"?2nۮ!3,X:`|^?dY cCލT9ng 2GN}^0aCN/uó8mh/kd_tJ`' Pbɦ4؁֥wJ0z,*3(L][tR7NKwg2K|wkeJO6J]fRWߠQp?h$IMlf<~v|$-`ҷ -o{RYC3~t&6uϽyځ1EpC$1pf!` tҬk_l**I`Ų%'TP|1'Ǒ1&0 wIMMOT6=ˁۂ==',@9P©7MYZ2߄?hظqn߆' 5;\|@gQyimZgR ظ"K*M$v}Z;0:|@|Qn%jYStՏN15qii[ ZCG(?yϚRil<DvʲGbPOۑf[.Ѧ Py~#W-J;"ialU1 77G4:ΙAUŗdhzڑ[p<,9D:X)# ?`.- eҪkPsKIhyj ބ`vR' R"!l;D#$ E];UdN@%Z^*Zrsx^xUǡcRM?! RDq;Syg#Zw#Fojݎ#RK #"0.,*AbGx j>3|T.#)8;p{B׍q8B^(mǫ˞q!DX̜{Ɖ!%XC+?~@MZP a0)ca73 26+f ݩ't8zۨ'((whxӆ_ ?fT5"9?Ispp^6xơ<ƵmoDZ `* f^qGJҊf,j=X0HzH$%D45OAdl^ͯ v w˻:o%Zx`lmRM:zv Ykٯ (*2m*vՖPh2<<1Ds"Rj+?t<u6DW1={u %w l P/'4Pkbf$ޅE{yDY|=;<"x3Գ}Gw/{Md pEW7F٬*MS&{wROmLEgd^ONL6%TOHGhL[a5%[ko1 _453JWǢpz_^ I'I`k 3$/#OIu7L,vUmdvj9܀b[U<􎏫ʳ1 \ wIoeD_yQFex@@b lHCt0O6x!s O!T}μZ3y8QGlcBaвUmzE2=4x2}$+)W ,lwTE84Ê4Y/n QeWagy㔙ZV*F3RC ;yDO.김&DV-XŲ?F,#ӃS0(cq(>Q%@*<CkP <=Zl' K@x3@aV]6s]C*N-Z:No,'F41w*7z=u}îʫ I&|chEOrZ)lT-آbk߈.zei, eD<p&4_5Tn-K40@P!==T(JVS2}<0dŪ!׃O6 LдN |} m PO@s~hRc%VxeJIJd31}Qk B0uslaiB,Cuka*D!MZNwlBn< D;!|;, b59sQ1>1Y HDDqHH]QU/6e08+_(QšhyQ71(,Qm[EK5mZHCI{xkM=gAq]QyަeʌDXXKu|ւ}Qs#qe=0p L| BV)3\M٢6= ْ`3LYjT%w*K)@rՙBm^vE1^_:fgd( ,  @K勉+o0JӯQ#r.  e`BjojHNy.(0iyJZ+!b4pޥ,랫xkёVhq,5K" q ]-- vr]K!8kW>{肈\AwkNm8-WVj* d0ȓu/iSrw` IYԹ,]/xsG)-٢( $fADk k8jD[劸QY3;*U剀d%Ak_(1yzi =-Ns=WƳxz1*ߓ-TzJyl3"ذ'Ũ1]3fA 6Ep6"`ajYi;*E_q144%ZQ-kVڹ AW%9@Yd rѺuS?M9|QŲZYj/ 򽩛/&\ky2o-]XC{X@yEOMaԫ-/>ܔsne]ßQK phӅ1a,UcWeMrG.b':/& ȭ̪z2s8]Ԍ/7<31u:S8S+us&EDW]{LwðfZ[C+khf1QcG*0aAJ~7\:h^HY( kRI<-Ww?ܘtâYUkhEgbgǍ|:e킪\(POݗd4cPfڠBs8O4J18W;"~W8SbIdZne}l9/K_1 ;|`z55Ii=VybfyUopKr%RBw&ޘs8eZT=!ΞM03ҽ@ݤC^vx45i3fÇC7hL;N=^Pn s4b$سdurAtLz߲g9N+ d-z-VU?``h$V3`42p&#eʳ-;S1R9TS!d11TV D$sQ)Pt!gz9֌<#Lcץ9| `}jf+PͯYOv]4?#x&kvV2t Z:9 Ͼɲ>0yb>@OE' %;*\r"̼7(%3,3LY+KZ83T٫ҊڠigyȩNPDqX*Ҏp擦fY{iD3(3Á=LzO5kh@[-ː/](CI~oTGzƀ{TX =tӵ/*6tH/!%ak"==`ld`CaGTx`HNԡ ^d-]q-X jO WIpFJI`ÁT@QzqRJ@39,Q8N) ? 45N,U23%B2hf\\]wUV,]EtQUEFq@9jL?pT`DDh݆"hoH"/蘁LGI2rEDwphc]25:Z/ |&x͠7zL uEx1CH0If^:_CGq3$4 /4 ƈP$רsw@c-MلC,mx99kIxFYF@5#ۇ|>S0Iبrز'p]Ơ<α*nbA 8bXC cHYt[z Ð|t+t4]!|m݌fAaH$4B-]9|Ǫյ_``s sH*ZX9S%UNC@\Gh# ӷ9}T vy|r$U4O);k~$s PR^hj{΍UK4Z_FЖ)/L-wD Zs"Rn&fyS BE#>r{Ј9]6=i϶G\s+2r䰘e&8k0k 9[ lA(kkl~F[1 |FzLk`Ѐh-ZDށ(%th[N xyYWWP/)sV}x`RTY9WBɭ96DCφp}*t8YVn3UM30u&+ܔ<|K۲BCNwqPs/Pz=Q@:`Z,x=y/l ] )I*74L_{ʱrr: Ui(ڴRFE DES"Oqk30 xXG2&{_8/Ar`-Ue)|[O%{@)Mt-Lzvxa#UYg-nBy|8l{+dDh~7/&EPFj`N!irQn!i5k5i!E3<=KW5N**Ɥ9}" +/' -phړ>)I_ 9-W68q~[U|8/F tw5hS3=v!Mi?Q^V<3<p@ PwpAY1Ǒp7WKFzLZb1ѓho+JP;u#@`z yXyfyrxx0͜(yy_Ěr0&5Mý>UϓD14h[ E^"Pg[fKY7Z;0HϏ2J*Xc<{_qhee<[יw ER(v] 6e*6)s=Y3 n7dzo PFWqYcG%c%׆W15GG :@ijBSQ/7uSFsU`֢-Yy8 @zbK[;=D)j# uƚG]E{Yb"M&U7rH [3[XMP H1Z@ ʽ lWau& C'̜pIo:+ i]l SaҚp5Tfd|? 1StE \ {5c(Kq0,hDE*K,j-G3ڬ*c% F9GDv'R1h?ǵa %d02MTs7F[OקAFKtK=1J֪Rk(QٖheE);LBWyXTeo TD$ּ "Cl`ݎo%Y| 'RiuQaVYԾVo~FP,*ٱml[Skysv2gѦS}fW0S%,banDnju3->yDth $S8`Q&e.?aCèսUgΜlOj5F%r:ыڿD2Ok2VQجE5 BDut=73-)xX?mѧa* ^O"0c`iڔ8,UR+F#UE`9 ԎDz9pǣ62D SRU}Z> FZ$,ssAkKt3@@aP䀡q&Da f?y/jnIb_`{˱?Rbg /<,wH0%kfت/<֡G> S.&3A|XZm)aB=yWĘ/j 5 fEUn˘s9M?H@yx2 "| 2@YK'Ї9p˻ǎ vSkm D82DeCfNM΀zR,XZ֐ -bLW;nU^u{zJE3/UEEHK%'J{؀Z5:q[ݿ8y?R2-/U52 LYg^y~Y}tKc(Kdz?|إ%=RUo(/8l 2HGfkݖ 䍁 1C[UņeYЅE3Xa,oƁS i*q33ng$`PbM@Rzzl_w8KpE )A?b#ls0E9Ě``2& m]߼$YB# yۼj:\䅚HC>scC eS0zt^~žsfC*DNMw".](H SRy 8Le,ōv㔈y&AoYRfB_*֚7Dknʒ{$cP;C/&{*G\ +\yZ,6,귯(!եd^xR)5WĐ"$zʴV{_9m2fD0yf+4mebtX&qݘB+kCih2tiY?9A{Z:Cc(g GKtF8m~ { ݈9eij&!o2!SSpkFΌY"Ez=2ZӠӡϸNg.+ pi^isم!FT]Ը uo@m5$kTzOͳzJ,+ց|z꫊mUaYLqd(!)>U0LM^WoV`d1{| ~Qp^oeVnpE4*9/=qz4DOIqdM1ޏ](d 􆽚8.igN0%c'"2 3ׅZI.*0H֞e^o?©$+mXrwT4S3y܃Юdt KXb`FpҔi ^m0T>!=.tFQbW;60Ї(<7f=A"&33fThi&ȫyh[9*6'$jn}9Ki0 c0xmamI`رYcpKOEw_# lrʗ+D#+&v i#鉈D@=aoDySTrP64xqʘ0?.UVRd}=Q{( +scZztE$߱TCXb, \C:m*`49=Iyr@%ޝ[+eXbē/U>&E`&VHrMel/s qݙp-XKx#\?iBPrTk!BGtݙUO2,~ӥ`¢#9TRM(!z^2C:bc_&dD.W̼H3p=yHcN@RFaFY"D-W؂93wX0:IrE(h,y  լhfckk5^OQUijνQuI)5`Ͽ֓^!l3hSQN[6aؼe+hڴT5+Xā'P RZ ׾^iD+9eQ%KD6@l|`r-<~@tAW (5XC0B44+e 8ZK,5#~ɞ?1ζn We]қ.m\3ԗِ?J ^dQ"K툈{vaܥBb gQȦ=P&zK!ʉ/&6|"x"̸ =;| 3VT\4-/Ttt-I $1ƞA ZCY㱅QYo?90)3Fa(wIԇ ND=N=447ʘg-'s*Lb:H2(Ms0RsG`&yr7x2KLg:dq sD#ȴ˪/=\m<  ;ch -6m)~P *!!XCL.0l9Փl݌B `Hr SW GQ鹊Jn' .'47<%{2˗MN=kf d6lWR^DVAΑ5Ό!( E%(Ysnp[)x@\Ec}u` kJ'#J7hbBXVWek/MD4FGϪdjLu{ Dc0WE:1h(5 XW˘hJ'WVu( ]_G>9F45Sy XSWY/&Les5`epP9=ҩPX6zR2=9s {s=]YZ`0QjUGDt"=_Tbf" t 1: -1֛M:_Hȓz]4q `5k4ts"xWVngg|Ӱ1wI$_yr9T7A4r\(@]ɲGg92̛!&+J[Vs@sWz-UXc;Ś$ /V; {N(/2ZٗJ=9DtiOY2l LUw*p >rTBvt1h9FUjbU]}_iC~ 'WU}Di61s`pѤ24vQʽeajib$5s@}0 ȋ^1{nt,ZP?/8H4J7J̩1tJ ­<#E !5V1[1vߴL2Q]# Y1fU `c*t 5mFŹ h]2 d `e\1s$S{ܓLq9 _C?pUR@v#DsbT п0]%8&BJ{WzW&MĐ1#9w#-lФZOЍۍlV˲߅ 2jLJX); J7pL\J-59s~SOaӌT.&WU\ґ!:Je>8+A9N,5.@ZpDJzz,qVt HMEl0̃Dq͋ItnV sxF _`N&&3oRKŶ^2Ibq> i#weHZf%q1h2 'f7W1Dfի͋BBV@Q" iv-f$Ǚ1xn(FZtFk@kq aس* ̈́tzH4v5A,1QUwܦRi 1=󓳑b,}](Fa"3!3T7?Y X#EVqRݠ#QG *OS3fXT7e/HJ:OQ_^+g p[n}T{J _tI"uw2c2Hl? MYG|TN*r˷WE*`|)q᜿ 3u.A@g>AЭC[zE 2O"h*= <%^1<ަkUG8 MYޢaƆ(x2jMݟ!D(]e,Z2`_eq3+yi酢*d?J_ 86(8`@JvG=&K&q,X<^[SԻEZ ;#1fV֞j nwZ @-R@&(?;1A W*}G3  LlZhYxߋ`tΜgJqsykʈU 4-PUQWACgXk8X2ܐD\(RXE_a?zxPUT@Y=ԋϏ2KU13]H(|D7E^QoTXc6H `:UXC-SKl33LC Z<XIG;ƴ /3X<ԴOoc%j6$01e$&hp>ec<{F f fyJ/n0OD.6'bnM˫b _g}4!LdXU~V G4rYA_gIَ3a\V3PF|¹ 싣 "h{[2 BYUQyt5A-hrdGGG Pk,#n@ꁳ[(Tw1&̭A晇ZYqP ]N51jY32z+凋7(4[\Ƴ 8yj7rj"$;E۵JWj!V~W8±8{`54d7Ee4ȕŔ"d8H c0gFɵەn&|ޗp} z{aFE`h'aZk{`h MKG,?] @gTo 0uy ߾5x̜xfrA]D-

VDh!VT%jU$Qȃ'^Wλ pFթ]hG8mBsxf\#](aݪc]FQEc@: ED49 eW+_C\s b&pDXR%l ']{~M?Zud %sxd/' B%@B0Rci䡆z%FΌg9l>惲3V\Wl 5qQƓMC [xN}# &qz= @N昇 ?O(aϫqjzHFZ}>Tu$1%-ϸR̽@נq{A8 7uc !pZ/Ǫ,jXwȓ#,eɩzD# (gRZE$RHij ~ tΟ09@3{T9g=3ܖoՉ5eZ܎8H5VLTb`wI-$ y0Ajq!E#;c2>1͚kŘֳIJqascB!ydx**3Pyfa?#߾򷯧["iB9ՍFUdV=HyxP|F@ `VK `#`] {تx%x^ֶG%/!kP)Q`G[_Qpc":v=0 @ubN^4PmPGk#$FIg&* gc ZX&csU|9z̕WkKd=GLP Fr\~J+U#ye5U,1ō*7O"ǩ|TϭY#~˳Jы3h,kAyT lЉ.h$4h p+K(NBFz&kYHU]y@M}`:mJw56&+ID4xE!5DXB=ht rPREĄ?Pu!gh--+qjxٞ pEF".abm?Y_?¸ _J@ (ۖc w8^U?`YYU{t")%J..8waB8Z~EJp}k0ƨ:Έ u !NGl3< ɸ( :(7Wfkmݻ-/+X%HYØb} `2NaZN|{ca>;q+3Zr뇛_Gݗ~㻷^ ֽ#'/ ea Un"8j'@iҰf@:!Np`N8?)h"xGmdԠ'):@0{,ɤFУVpKJ3'y0u0L?vjmvg9{rk;ho'STX |)M14#9\_sncМP`0fmOGnxԇNJZ`*/UG? JU}UI"g Mq Ƒ%E5Yu}Ňw\6#)_8/k,8EecIHljzGpܵ9[+^+S!܀8Aбۗ\"C`.feeLzn4#﵊yN6k~p^oH y1Ϲ$&Cc c`G /+o?HX:VlfuS7N ` 6K9,É:@7@+2 ,eTo?^/S@yW\9 m-Či}CuGN2ژ%f^?lOSk^le[ a[:0m=y2/+ծ|$Km6u/Ҩ:]{3JsS00QW/Bq85u/ dIz׍ױQ)L D c[3 Q \e赜T7魵RZf}Q Ex s~Bg'WôJ/z_ͫ&2ՑIpP2m|uIr %A4MIWkNSzFRXO'b&”=mOt5. aTu񐁇S B(Ksv5ě0_bbIX؃aön2qw#N j\a3,P!#Oe#qUB1(0mP*#=<(OM:n YM *cUf摈c1bՆWNE~bG]N2z]уq*z,%Q,aJ [ wʐef&;yH잋aNA`>D7p`yz{u"ʌQ S@NxL gۍ[Z^q1 +Di$?_-` QYZFy2WR(tmI&o뉳!~#_P~2JǛĞk_o::,bx1 ALK^z˹mQǔ6} =ɟZݵ&9DO`[eVვMGAMwOglggo;Duj>{_:"/ɼ_rKzgI!<@):s](4{5j;$"ź6 hؓDy uG e_@"X0߾&4\ RxߔG_D1܈ZUKlhQ ҈#J;CcZi9BHFQȃ C7ۘl}4~CAۀ;@7k t'& WMWG}?>N)Ҙ.qOsJc%_Xu_pc:)sFJt"Mߛ^&^3Po9Z[봎zꩌ7VQa^!RWd"knݰ.uӀmUiY:#JZVs!rkߕjk+#+@{?_z O^;?1^zd U ҭ] -,^8f\4JcZ&=ʀ<Y1LC 1H.C7X,w]5&N"d=.I/x4l52)\iqd'Cl6Xn:]{\X#Ԭ~ sxLWa_zUyfUaÈ6fqj0h4kKN\ppkV?uD䔪S(:P{TZ}|@u ηy- q'gzį'Qzj5ͽ$?YI"pfbt]z93(ER` ߆N K4e)N?*f"S5U_^78+>G֔&$덛B p5Lq`dX\@%G8 K|IXu!K {IY׀+JU=gjB6pe(l ̳|^)AЩzuƹ9=4¡FI6A8h8Z{uBhpVynʹ$?zh{6Z*j`NS^W!^Hȑ_SjbnW{fu19]ƺ1 h靰KaU`3 t Z#ДK}K䁆c|^yLTCt0gin4ԙC|J %O~u4.ҔXF?Ԧe`1 RFS%[mb-6VW{>)%?cO lm~-?8gI˛M;Ф y-wGP$>( ÷:F`{Ffc ;?(+u b—>)uj'aBȳhF9kxbxI1m> ߾r|k0; %ed]^,%fM.7>vKT.o_Ą C7@uy9oҶ*>1Cg s4ky=Eg3~ )r&dcz?r?!'"պ.s Y, DHoWu2`5(C&렗z'Z094 zXsʀ>;Tܩ:2Xm]n^B tV޼zNblCO/{Ǒ%l-HZGՇak6۾V:< e$ $BޚB GHM)yt`Yk6 R%K%Φf}tKc[A7Ds:T!f ]> COMPRESSOR 1 CYLINDER 8501031 E W I T H O U T O I L E Q U A L I S A T I O N 25 .98 [ ] 98 3.85 [ ] 68 2.67 [ ] 109 4.29 [ ] 15 .60 [ ] 23 .90 [ ] 17 .67 [ ] 39 1.52 [ ] 118 4.65 [ ] 123 4.84 [ ] 68 2.68 [ ] 35° 263 10.34 [ ] 82 3.22 [ ] SUCTION D I S C H A R G E 142 5.59 [ ] 142 5.60 [ ] Ø 224 8.83 [ ] 333 13.12 [ ] Ø 31,75 1.25 [ ] 159 6.26 [ ] C O M P R E S S O R S MT/MTZ 18-3/4 MT/MTZ 22-3/4/6 MT/MTZ 28-3/4/6 S U C T I O N R O T A L O C K 1" D I S C H A R G E R O T A L O C K 1" P T C C R A N K C A S E H E A T E R S C H R A D E R 1/4" B O L T H M 8 - 4 0 G R O M M E T C O M P R E S S I O N N O T I N C L U D E D , A R O U N D 1 M M S I L E N T B L O C K svgsalamander-0~svn95.orig/svg-core/src/test/res/1C2EC148.png0000644000175000017500000013661011427227157022411 0ustar moonmoonPNG  IHDR\rf pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxْ$Ir% 6=\*UНA? T&5yi.BDUfDይ*¦fKHŠt7S_k4/_`7k_k _ko_{`7k_k _ko_{`7k_k _ko_{`7k_k _ko_{`7k_k쯟ߞ?>_'rY#>_맙 B(`Ӹ !f_>~(*_ <`5@]~b8 Jbo/ F )=`}֫ M9 _އʲs*~*g?D OQ?QOp4 eLOH 7=c S289=?j@pq0S2 #e< R3k?87qXP}YPi}}#*xg)}G? )4l>c(={H')gχ~t} 9*|p8 Fʏ]  WVXE{&3 dM Y14φp? $xFs/~~횒#=YNx\4vtyߗI x? »(Pc̖ F!`/$ٽw0JhQs>|.7>$\uKՏMǴ57p>XܓS4\K~·x7x' h0wl#<[(#_ʳKs' 5 1xB\"K#Hl = ]_DT 8|كRzKJŽՑ/1  {4M@qi/k4?JQ앆|6 k:FI R+kma~C\@cD{p}ErO #op~ i~8<'ruǙ#tmў|JUgziKqX$y@J55q7RѮzGM\"ZF6g*N6C6a8ҢMBD} U$bZ{gvvD6 k3 y(?vP=#`>V҅T=Xa>ys ,ϝ?R⬹"rh;bAR|,o44+܃ɔ}.!G݀ +ac|08&^'4ĥ?w p6@Z)>4\>G#w0"zG8 z|/q 'dPω=a[%6l `/?@TъjUpOD-hNIV=Јԇ ej0D`cO | vsWg1\e #V<⻒ȣ_cpvǍUMy0L pk`9e#M'Bw9Pu6p6a>$NE ckQxDﯯs8Q; yybJu@ƺ.82A;~nLeҘSx4s ?" `e"0Lw >>/5XJw{Ha#7"ZTpf'-^΃᪢DH@  z"#;`"Xs  p=@F6z 8@D6X˺v  ac^= }{jD4wF!C]58'P9۲u#3P>CQ~x:^0=c=dtwI8Bxš\+nKUwڋz.Ey&=Q>  3*U@@ {kA AĔ+qR8qc84/a}~}{ 2yw!ק;`Tój%]`z c@1Tߥn<$ڂKԓ۰n+\J5(]{z5)=$ײ<2)G4y5WdFI!|w<#3!H:s >)G1KTgWX>u nUɁBn]|V*mM.]l~gJq"N.8FCoy_r i`= ϖ\qoBxp׿=$?j8kCH6y0Di@_Ro5@;#"_>}b N$]\Us޹<y6+ 2? iT :@@ylG.+B"hSH#Cq @ V*J (mlү~ٵ݄0$=ރhHHez=]nEM]qHs")pn+I1uRR}RS.)ȣZMd勉 /N7UҢC- 0b jt[AI6 ;.=a3ߵ{N3dnⶽ0 ?@]+#YAJM3Ix,|Y c0%jSi@Jl'3Z(⠥ ͆!W1T1S,#q6V@h_~wqfv_3J8d%D&-%"ޫ:E 9PZQD(!w@zn)$olXā2)qHD-SP=} fƘ~GG O;+#tW4-ᑺSLL2ɆCL^L_ԁ0&.@G(b,%=VkE$"hdΈjDU8h:.ьs.t?͘Ȭ.]U!"CnR4 ,֍D"ep.GX]_eh}WfefVC0*So'\bȅQF1>!"Nމ #W-*)y . g@Qp_b::Cf)Vs|{6|xzy$*/s/t@-Qǘ+߅{繊fխ+>`dU Q'R-=JxoEm)I ;ǙZG7 N`6|%Q{.ƣD`~}?$Wi4J-0o > zzu"Q Fh'{z`Rx -c Ӕߢ!GF=)Iߢ##]ЊMB8؆0P3>꿾=D+O-izhˎIJ:{8.U0w Z.eta<Rg>HD;A"ORM[ՉA-!8ɚ(OL[ jb.(ƛY?Hg<|w`ˑZ]7hy^aGfKR"d~`{޹:һ:ވ uT:[% l.*^%\0m+/rCH;d m ;S'# c\ۦ畷=/^p϶iZm9 YtpіGU'h%⮈kc &F Q>ܬ0)1C-FpsܗʫbeuQ#mօf-mtF*4J,X 7rH߳g;` Pv'l/V}[niM$׈["e{C]gƬp!oQ{@37 C.ldK ,5p) D&*7%Q܇CR%r / /&INݻ-)fMY4%12Q5suˬ lQ_FoU0*~P~(d #"Q>C[E `Jw^hvҩw Ku3}?J÷47 ņV.C8Zwh=󥵥>m L7<#ѧ0PsFڂn>z\zvdʸ}ڒg{$E~z< !23A#B c_KDkKxeT i;"pA7q H=s`IBnج , \ "+eEҧaO1>#A SsgnE"!ӕtL}~櫞 0$Z ]@+6I3T AF@&"6Dsf+#8ݳȋ}l2ܯgseDw01ɺTSJuӐK5vm^asX?`ͯo»6\5@ӿ(vRm!`EpP6csc csh!,KTJ-Kr7 9yxYQ5ªhIz·zܚ ;kvRQ/̝s34݈}8]f5hX[h-CP Ȃ![) "OQ zqrڨߪжb!+W64 H况4D@ ԧ 4pvOە st߁ 􅽽WUy CW侵rbE{* c{@AJQpPtB7]:DtԶ.검%?i26"6`cYQն ait$Yku^=%M3"QrdB/B!i3"W#=wb!TުT$Z);2WN,%slbFqMᬥ:%أ-;Z ǹ`ueE:V=zn@#v6>Z-G8юxHcКw% Y;ЕuQ 4||M[` ,SE2$ePXmS%IE囂N[{ nIBubuܛec] Uz-%7&ϟ\(!&PneZDPxυ)0::WQqa[f꽖 P&*yp:\hʄ'Mvlt>s>KԈob!GyFWw80*وo:ܗjj́l)L.p<iF_Kہ7&Fihdl5nic˨or ToD0DsSg؆Dh3o fۨ&ۆls!2a?ZtRLHu`>ɖJ@WcLm FB\y`õHm^X!2D^r1;X`Ǽ\cxA/_LC Yw9a-7$em?p= ?p|ڄ uk 4'[rp7yI㒙FEXت{YvD"aGX_YzWNnL4'pWR= ڟZ{ѱowc ɳLw) nۨV.dV8p UzS huA4TLxjsz&TZ-$Th5iT_Ue Z^b`=D*Оx׷&螁J ybhp4LyemiM|$Bw 9r8x+ u݃C{A[ܒw,66"i7 )|0R\!_ 1c6asӶvMQO%`8=Ìd 0J afm ]p*t\ӊPp#/勉 /L7!ht kQ.xuDf?<=EO<ɀW .g:pR9$!vnefB}>F^7*S0f=`ڿA+V*O`TJ=P/_Lb 3]FFFn:|φ$ \ .(`$9"k#1گgDHLG-6yM fQ |s׈w}ڳ~Q Ȱh XWjEo%Hwކ냿 ]4S6\|Eۄqj|(U%ϕD ZhG[@`y+C榘pͰ+`MW8FjlSVD4 VFBUg % Yۘ`wmV=EfCb3sN'P6̲r9!&&w1RUw^an9 t`مLѐ`xHɨ.B8} `@68v4{=g EM<:@+D,KYo^Li0 QHw ~/ooC*q ̷uاYS8rnwn 1gv3SUئK ײa`ib_kjn3?V3/}q %L_y+ceF\+D'{!B.ē&[ ׻exHTVG4C2^[hD# sinyRRQ8 xp@l/0`i 33[3!wbG%_1 \H),`I3 j{\^چ|zoCZSU W7Tc0S GbgᕊF65oQlNUAGfS({% e]yJYPieW.svw45fF &=ёSz`p,lVU4TGX)62G@SbF ÌySjѱ>q4h;BJj8At),ybf??mGFNu lA9u\@ $\PXFMڊ1 OQ]E\Q3e̜eS3wA޸q&%I *:IlĚqStYi 4 1Xi6Xjʩ !^G]nP!ofHʶ{Rb 3g=$Yj]MmH6QS «U0AFILt W}P%6(g='!b0C.u'd 3 5+ {,y {K6'>7ڳKwQCMِp4*MiQ]tD66:>ƜYc>}֑K^_g{M * h nnBg~ #ݐ 7mfM @64/_9LG=^K&Qp o}YjZ='7%_]P~~>_uy d<k;efjTV(˽Slb Z5 $t[{}Ů!95FR'CPO,xUy N3u7kK뮛(5БCPWކyI whrPDUAƘƴ f`ITXYDa:]勉U96 +@Jf,OFg n JٜV{frS>7D(IB]ߖ Y3)3e@i{-'EzRuԒLjW2V .ȏ 0=x>mEۢ>.bx)1-\1$e鏙1J Ě9U1gcMHo݆zm``V{bk=>)Kk(Wpn;c_ W?_~¼S (єͤ4Lpw [3e ;f C.e7,3ބ?#R˞O%VjiS`Vc+[Lj T.bHa KQf'aûU6@  {ձ8+=Hdt'Лt ZZJiRV"B<˥b nn\iZDr?[ꇧ3c[53EC034@s `:fvg+_rf|p{TE'5 ba;<\33aKDD:Qѣ3ђl6M('Z q  [`1i̝#"Te9I %`InպGkZ"HKLaF59=$IqBM 1p ZBT:5 c,<tl82h:VW)QFle| Q ]-hm\z1.YI̩? ptjDX4VtH/> *֑?a_gK֧@賯lʺ*P?YmL3#Q 0I,gwI8^͋/02vY$9H-24=+ v|tp)O !rd&蜒 niYhZ&JVQ&d 0g Uo++xl5Rfv]OW]*~2+|(ՋeL:``;PL~ IyMTh |2⮃<;>o\2h9ZoݴKK8<;Q=KIbRNwi]ʚf#r"!Z:sb PTTٲk4& 9h#WҠEw&Slj,fIgeOa 7nr,"K9ԁHQŧOcV;Y 14Bpr;l5UYy_}κh7Jݱ (#KYRs/= ᪤W aw*#q3aS^ ap*,W<רn zE60 ߝ)%qm1X1I-=I-= \?VbDaԀZ1ȯ&h{&QlZ54H- *ug"n^z,py آj+7 V߸eY7*mR1sb-Cyڷ&K32%SZ!tK0]^/"xi ̂#]NU1}l:uE]Xhׇ Dtd "AWЇpwյuh<&u(D'|"?2nۮ!3,X:`|^?dY cCލT9ng 2GN}^0aCN/uó8mh/kd_tJ`' Pbɦ4؁֥wJ0z,*3(L][tR7NKwg2K|wkeJO6J]fRWߠQp?h$IMlf<~v|$-`ҷ -o{RYC3~t&6uϽyځ1EpC$1pf!` tҬk_l**I`Ų%'TP|1'Ǒ1&0 wIMMOT6=ˁۂ==',@9P©7MYZ2߄?hظqn߆' 5;\|@gQyimZgR ظ"K*M$v}Z;0:|@|Qn%jYStՏN15qii[ ZCG(?yϚRil<DvʲGbPOۑf[.Ѧ Py~#W-J;"ialU1 77G4:ΙAUŗdhzڑ[p<,9D:X)# ?`.- eҪkPsKIhyj ބ`vR' R"!l;D#$ E];UdN@%Z^*Zrsx^xUǡcRM?! RDq;Syg#Zw#Fojݎ#RK #"0.,*AbGx j>3|T.#)8;p{B׍q8B^(mǫ˞q!DX̜{Ɖ!%XC+?~@MZP a0)ca73 26+f ݩ't8zۨ'((whxӆ_ ?fT5"9?Ispp^6xơ<ƵmoDZ `* f^qGJҊf,j=X0HzH$%D45OAdl^ͯ v w˻:o%Zx`lmRM:zv Ykٯ (*2m*vՖPh2<<1Ds"Rj+?t<u6DW1={u %w l P/'4Pkbf$ޅE{yDY|=;<"x3Գ}Gw/{Md pEW7F٬*MS&{wROmLEgd^ONL6%TOHGhL[a5%[ko1 _453JWǢpz_^ I'I`k 3$/#OIu7L,vUmdvj9܀b[U<􎏫ʳ1 \ wIoeD_yQFex@@b lHCt0O6x!s O!T}μZ3y8QGlcBaвUmzE2=4x2}$+)W ,lwTE84Ê4Y/n QeWagy㔙ZV*F3RC ;yDO.김&DV-XŲ?F,#ӃS0(cq(>Q%@*<CkP <=Zl' K@x3@aV]6s]C*N-Z:No,'F41w*7z=u}îʫ I&|chEOrZ)lT-آbk߈.zei, eD<p&4_5Tn-K40@P!==T(JVS2}<0dŪ!׃O6 LдN |} m PO@s~hRc%VxeJIJd31}Qk B0uslaiB,Cuka*D!MZNwlBn< D;!|;, b59sQ1>1Y HDDqHH]QU/6e08+_(QšhyQ71(,Qm[EK5mZHCI{xkM=gAq]QyަeʌDXXKu|ւ}Qs#qe=0p L| BV)3\M٢6= ْ`3LYjT%w*K)@rՙBm^vE1^_:fgd( ,  @K勉+o0JӯQ#r.  e`BjojHNy.(0iyJZ+!b4pޥ,랫xkёVhq,5K" q ]-- vr]K!8kW>{肈\AwkNm8-WVj* d0ȓu/iSrw` IYԹ,]/xsG)-٢( $fADk k8jD[劸QY3;*U剀d%Ak_(1yzi =-Ns=WƳxz1*ߓ-TzJyl3"ذ'Ũ1]3fA 6Ep6"`ajYi;*E_q144%ZQ-kVڹ AW%9@Yd rѺuS?M9|QŲZYj/ 򽩛/&\ky2o-]XC{X@yEOMaԫ-/>ܔsne]ßQK phӅ1a,UcWeMrG.b':/& ȭ̪z2s8]Ԍ/7<31u:S8S+us&EDW]{LwðfZ[C+khf1QcG*0aAJ~7\:h^HY( kRI<-Ww?ܘtâYUkhEgbgǍ|:e킪\(POݗd4cPfڠBs8O4J18W;"~W8SbIdZne}l9/K_1 ;|`z55Ii=VybfyUopKr%RBw&ޘs8eZT=!ΞM03ҽ@ݤC^vx45i3fÇC7hL;N=^Pn s4b$سdurAtLz߲g9N+ d-z-VU?``h$V3`42p&#eʳ-;S1R9TS!d11TV D$sQ)Pt!gz9֌<#Lcץ9| `}jf+PͯYOv]4?#x&kvV2t Z:9 Ͼɲ>0yb>@OE' %;*\r"̼7(%3,3LY+KZ83T٫ҊڠigyȩNPDqX*Ҏp擦fY{iD3(3Á=LzO5kh@[-ː/](CI~oTGzƀ{TX =tӵ/*6tH/!%ak"==`ld`CaGTx`HNԡ ^d-]q-X jO WIpFJI`ÁT@QzqRJ@39,Q8N) ? 45N,U23%B2hf\\]wUV,]EtQUEFq@9jL?pT`DDh݆"hoH"/蘁LGI2rEDwphc]25:Z/ |&x͠7zL uEx1CH0If^:_CGq3$4 /4 ƈP$רsw@c-MلC,mx99kIxFYF@5#ۇ|>S0Iبrز'p]Ơ<α*nbA 8bXC cHYt[z Ð|t+t4]!|m݌fAaH$4B-]9|Ǫյ_``s sH*ZX9S%UNC@\Gh# ӷ9}T vy|r$U4O);k~$s PR^hj{΍UK4Z_FЖ)/L-wD Zs"Rn&fyS BE#>r{Ј9]6=i϶G\s+2r䰘e&8k0k 9[ lA(kkl~F[1 |FzLk`Ѐh-ZDށ(%th[N xyYWWP/)sV}x`RTY9WBɭ96DCφp}*t8YVn3UM30u&+ܔ<|K۲BCNwqPs/Pz=Q@:`Z,x=y/l ] )I*74L_{ʱrr: Ui(ڴRFE DES"Oqk30 xXG2&{_8/Ar`-Ue)|[O%{@)Mt-Lzvxa#UYg-nBy|8l{+dDh~7/&EPFj`N!irQn!i5k5i!E3<=KW5N**Ɥ9}" +/' -phړ>)I_ 9-W68q~[U|8/F tw5hS3=v!Mi?Q^V<3<p@ PwpAY1Ǒp7WKFzLZb1ѓho+JP;u#@`z yXyfyrxx0͜(yy_Ěr0&5Mý>UϓD14h[ E^"Pg[fKY7Z;0HϏ2J*Xc<{_qhee<[יw ER(v] 6e*6)s=Y3 n7dzo PFWqYcG%c%׆W15GG :@ijBSQ/7uSFsU`֢-Yy8 @zbK[;=D)j# uƚG]E{Yb"M&U7rH [3[XMP H1Z@ ʽ lWau& C'̜pIo:+ i]l SaҚp5Tfd|? 1StE \ {5c(Kq0,hDE*K,j-G3ڬ*c% F9GDv'R1h?ǵa %d02MTs7F[OקAFKtK=1J֪Rk(QٖheE);LBWyXTeo TD$ּ "Cl`ݎo%Y| 'RiuQaVYԾVo~FP,*ٱml[Skysv2gѦS}fW0S%,banDnju3->yDth $S8`Q&e.?aCèսUgΜlOj5F%r:ыڿD2Ok2VQجE5 BDut=73-)xX?mѧa* ^O"0c`iڔ8,UR+F#UE`9 ԎDz9pǣ62D SRU}Z> FZ$,ssAkKt3@@aP䀡q&Da f?y/jnIb_`{˱?Rbg /<,wH0%kfت/<֡G> S.&3A|XZm)aB=yWĘ/j 5 fEUn˘s9M?H@yx2 "| 2@YK'Ї9p˻ǎ vSkm D82DeCfNM΀zR,XZ֐ -bLW;nU^u{zJE3/UEEHK%'J{؀Z5:q[ݿ8y?R2-/U52 LYg^y~Y}tKc(Kdz?|إ%=RUo(/8l 2HGfkݖ 䍁 1C[UņeYЅE3Xa,oƁS i*q33ng$`PbM@Rzzl_w8KpE )A?b#ls0E9Ě``2& m]߼$YB# yۼj:\䅚HC>scC eS0zt^~žsfC*DNMw".](H SRy 8Le,ōv㔈y&AoYRfB_*֚7Dknʒ{$cP;C/&{*G\ +\yZ,6,귯(!եd^xR)5WĐ"$zʴV{_9m2fD0yf+4mebtX&qݘB+kCih2tiY?9A{Z:Cc(g GKtF8m~ { ݈9eij&!o2!SSpkFΌY"Ez=2ZӠӡϸNg.+ pi^isم!FT]Ը uo@m5$kTzOͳzJ,+ց|z꫊mUaYLqd(!)>U0LM^WoV`d1{| ~Qp^oeVnpE4*9/=qz4DOIqdM1ޏ](d 􆽚8.igN0%c'"2 3ׅZI.*0H֞e^o?©$+mXrwT4S3y܃Юdt KXb`FpҔi ^m0T>!=.tFQbW;60Ї(<7f=A"&33fThi&ȫyh[9*6'$jn}9Ki0 c0xmamI`رYcpKOEw_# lrʗ+D#+&v i#鉈D@=aoDySTrP64xqʘ0?.UVRd}=Q{( +scZztE$߱TCXb, \C:m*`49=Iyr@%ޝ[+eXbē/U>&E`&VHrMel/s qݙp-XKx#\?iBPrTk!BGtݙUO2,~ӥ`¢#9TRM(!z^2C:bc_&dD.W̼H3p=yHcN@RFaFY"D-W؂93wX0:IrE(h,y  լhfckk5^OQUijνQuI)5`Ͽ֓^!l3hSQN[6aؼe+hڴT5+Xā'P RZ ׾^iD+9eQ%KD6@l|`r-<~@tAW (5XC0B44+e 8ZK,5#~ɞ?1ζn We]қ.m\3ԗِ?J ^dQ"K툈{vaܥBb gQȦ=P&zK!ʉ/&6|"x"̸ =;| 3VT\4-/Ttt-I $1ƞA ZCY㱅QYo?90)3Fa(wIԇ ND=N=447ʘg-'s*Lb:H2(Ms0RsG`&yr7x2KLg:dq sD#ȴ˪/=\m<  ;ch -6m)~P *!!XCL.0l9Փl݌B `Hr SW GQ鹊Jn' .'47<%{2˗MN=kf d6lWR^DVAΑ5Ό!( E%(Ysnp[)x@\Ec}u` kJ'#J7hbBXVWek/MD4FGϪdjLu{ Dc0WE:1h(5 XW˘hJ'WVu( ]_G>9F45Sy XSWY/&Les5`epP9=ҩPX6zR2=9s {s=]YZ`0QjUGDt"=_Tbf" t 1: -1֛M:_Hȓz]4q `5k4ts"xWVngg|Ӱ1wI$_yr9T7A4r\(@]ɲGg92̛!&+J[Vs@sWz-UXc;Ś$ /V; {N(/2ZٗJ=9DtiOY2l LUw*p >rTBvt1h9FUjbU]}_iC~ 'WU}Di61s`pѤ24vQʽeajib$5s@}0 ȋ^1{nt,ZP?/8H4J7J̩1tJ ­<#E !5V1[1vߴL2Q]# Y1fU `c*t 5mFŹ h]2 d `e\1s$S{ܓLq9 _C?pUR@v#DsbT п0]%8&BJ{WzW&MĐ1#9w#-lФZOЍۍlV˲߅ 2jLJX); J7pL\J-59s~SOaӌT.&WU\ґ!:Je>8+A9N,5.@ZpDJzz,qVt HMEl0̃Dq͋ItnV sxF _`N&&3oRKŶ^2Ibq> i#weHZf%q1h2 'f7W1Dfի͋BBV@Q" iv-f$Ǚ1xn(FZtFk@kq aس* ̈́tzH4v5A,1QUwܦRi 1=󓳑b,}](Fa"3!3T7?Y X#EVqRݠ#QG *OS3fXT7e/HJ:OQ_^+g p[n}T{J _tI"uw2c2Hl? MYG|TN*r˷WE*`|)q᜿ 3u.A@g>AЭC[zE 2O"h*= <%^1<ަkUG8 MYޢaƆ(x2jMݟ!D(]e,Z2`_eq3+yi酢*d?J_ 86(8`@JvG=&K&q,X<^[SԻEZ ;#1fV֞j nwZ @-R@&(?;1A W*}G3  LlZhYxߋ`tΜgJqsykʈU 4-PUQWACgXk8X2ܐD\(RXE_a?zxPUT@Y=ԋϏ2KU13]H(|D7E^QoTXc6H `:UXC-SKl33LC Z<XIG;ƴ /3X<ԴOoc%j6$01e$&hp>ec<{F f fyJ/n0OD.6'bnM˫b _g}4!LdXU~V G4rYA_gIَ3a\V3PF|¹ 싣 "h{[2 BYUQyt5A-hrdGGG Pk,#n@ꁳ[(Tw1&̭A晇ZYqP ]N51jY32z+凋7(4[\Ƴ 8yj7rj"$;E۵JWj!V~W8±8{`54d7Ee4ȕŔ"d8H c0gFɵەn&|ޗp} z{aFE`h'aZk{`h MKG,?] @gTo 0uy ߾5x̜xfrA]D-

VDh!VT%jU$Qȃ'^Wλ pFթ]hG8mBsxf\#](aݪc]FQEc@: ED49 eW+_C\s b&pDXR%l ']{~M?Zud %sxd/' B%@B0Rci䡆z%FΌg9l>惲3V\Wl 5qQƓMC [xN}# &qz= @N昇 ?O(aϫqjzHFZ}>Tu$1%-ϸR̽@נq{A8 7uc !pZ/Ǫ,jXwȓ#,eɩzD# (gRZE$RHij ~ tΟ09@3{T9g=3ܖoՉ5eZ܎8H5VLTb`wI-$ y0Ajq!E#;c2>1͚kŘֳIJqascB!ydx**3Pyfa?#߾򷯧["iB9ՍFUdV=HyxP|F@ `VK `#`] {تx%x^ֶG%/!kP)Q`G[_Qpc":v=0 @ubN^4PmPGk#$FIg&* gc ZX&csU|9z̕WkKd=GLP Fr\~J+U#ye5U,1ō*7O"ǩ|TϭY#~˳Jы3h,kAyT lЉ.h$4h p+K(NBFz&kYHU]y@M}`:mJw56&+ID4xE!5DXB=ht rPREĄ?Pu!gh--+qjxٞ pEF".abm?Y_?¸ _J@ (ۖc w8^U?`YYU{t")%J..8waB8Z~EJp}k0ƨ:Έ u !NGl3< ɸ( :(7Wfkmݻ-/+X%HYØb} `2NaZN|{ca>;q+3Zr뇛_Gݗ~㻷^ ֽ#'/ ea Un"8j'@iҰf@:!Np`N8?)h"xGmdԠ'):@0{,ɤFУVpKJ3'y0u0L?vjmvg9{rk;ho'STX |)M14#9\_sncМP`0fmOGnxԇNJZ`*/UG? JU}UI"g Mq Ƒ%E5Yu}Ňw\6#)_8/k,8EecIHljzGpܵ9[+^+S!܀8Aбۗ\"C`.feeLzn4#﵊yN6k~p^oH y1Ϲ$&Cc c`G /+o?HX:VlfuS7N ` 6K9,É:@7@+2 ,eTo?^/S@yW\9 m-Či}CuGN2ژ%f^?lOSk^le[ a[:0m=y2/+ծ|$Km6u/Ҩ:]{3JsS00QW/Bq85u/ dIz׍ױQ)L D c[3 Q \e赜T7魵RZf}Q Ex s~Bg'WôJ/z_ͫ&2ՑIpP2m|uIr %A4MIWkNSzFRXO'b&”=mOt5. aTu񐁇S B(Ksv5ě0_bbIX؃aön2qw#N j\a3,P!#Oe#qUB1(0mP*#=<(OM:n YM *cUf摈c1bՆWNE~bG]N2z]уq*z,%Q,aJ [ wʐef&;yH잋aNA`>D7p`yz{u"ʌQ S@NxL gۍ[Z^q1 +Di$?_-` QYZFy2WR(tmI&o뉳!~#_P~2JǛĞk_o::,bx1 ALK^z˹mQǔ6} =ɟZݵ&9DO`[eVვMGAMwOglggo;Duj>{_:"/ɼ_rKzgI!<@):s](4{5j;$"ź6 hؓDy uG e_@"X0߾&4\ RxߔG_D1܈ZUKlhQ ҈#J;CcZi9BHFQȃ C7ۘl}4~CAۀ;@7k t'& WMWG}?>N)Ҙ.qOsJc%_Xu_pc:)sFJt"Mߛ^&^3Po9Z[봎zꩌ7VQa^!RWd"knݰ.uӀmUiY:#JZVs!rkߕjk+#+@{?_z O^;?1^zd U ҭ] -,^8f\4JcZ&=ʀ<Y1LC 1H.C7X,w]5&N"d=.I/x4l52)\iqd'Cl6Xn:]{\X#Ԭ~ sxLWa_zUyfUaÈ6fqj0h4kKN\ppkV?uD䔪S(:P{TZ}|@u ηy- q'gzį'Qzj5ͽ$?YI"pfbt]z93(ER` ߆N K4e)N?*f"S5U_^78+>G֔&$덛B p5Lq`dX\@%G8 K|IXu!K {IY׀+JU=gjB6pe(l ̳|^)AЩzuƹ9=4¡FI6A8h8Z{uBhpVynʹ$?zh{6Z*j`NS^W!^Hȑ_SjbnW{fu19]ƺ1 h靰KaU`3 t Z#ДK}K䁆c|^yLTCt0gin4ԙC|J %O~u4.ҔXF?Ԧe`1 RFS%[mb-6VW{>)%?cO lm~-?8gI˛M;Ф y-wGP$>( ÷:F`{Ffc ;?(+u b—>)uj'aBȳhF9kxbxI1m> ߾r|k0; %ed]^,%fM.7>vKT.o_Ą C7@uy9oҶ*>1Cg s4ky=Eg3~ )r&dcz?r?!'"պ.s Y, DHoWu2`5(C&렗z'Z094 zXsʀ>;Tܩ:2Xm]n^B tV޼zNblCO/{Ǒ%l-HZGՇak6۾V:< e$ $BޚB GHM)yt`Yk6 R%K%Φf}tKc[A7Ds:T!f ]> svgsalamander-0~svn95.orig/svg-core/src/main/0000755000175000017500000000000011562044257020054 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/0000755000175000017500000000000011562044254020772 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/xml/0000755000175000017500000000000011562044254021572 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/xml/postXform.svg0000644000175000017500000000675310627134103024321 0ustar moonmoon Hello good day svgsalamander-0~svn95.orig/svg-core/src/main/java/xml/formControls.js0000644000175000017500000000137510627134103024617 0ustar moonmoon /** * Layout a form control. Must be called to initialize and whenever the * form's dimensions change. */ function pack() { } function moveLabel(name, x, y, width, height) { var clipRect = svgDocument.getElementById(name + "-clip-rect"); clipRect.setAttribute("x", x); clipRect.setAttribute("y", y); clipRect.setAttribute("width", width); clipRect.setAttribute("height", height); var rect = svgDocument.getElementById(name + "-rect"); rect.setAttribute("x", x); rect.setAttribute("y", y); rect.setAttribute("width", width); rect.setAttribute("height", height); var text = svgDocument.getElementById(name + "-text"); rect.setAttribute("x", x); rect.setAttribute("y", y); }svgsalamander-0~svn95.orig/svg-core/src/main/java/xml/postXform.html0000644000175000017500000000065010627134103024454 0ustar moonmoon

SVG image

svgsalamander-0~svn95.orig/svg-core/src/main/java/xml/sampleForm.xml0000644000175000017500000000263510627134103024421 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/0000755000175000017500000000000011562044254021550 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/0000755000175000017500000000000011562044254023054 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/0000755000175000017500000000000011562044330023646 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/0000755000175000017500000000000011562044254025632 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackManager.java0000644000175000017500000001133310627134103031027 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 11:34 PM */ package com.kitfox.svg.animation; import java.util.*; import com.kitfox.svg.*; import java.io.Serializable; /** * Every element contains tracks, which manage the animation. There is one track * for every parameter with animation, and each track in turn is composed of * many events. * * @author Mark McKay * @author Mark McKay */ public class TrackManager implements Serializable { public static final long serialVersionUID = 0; static class TrackKey { String name; int type; TrackKey(AnimationElement base) { this(base.getAttribName(), base.getAttribType()); } TrackKey(String name, int type) { this.name = name; this.type = type; } public int hashCode() { return name.hashCode() ^ type; } public boolean equals(Object obj) { if (!(obj instanceof TrackKey)) return false; TrackKey key = (TrackKey)obj; return key.type == type && key.name.equals(name); } } HashMap tracks = new HashMap(); /** Creates a new instance of TrackManager */ public TrackManager() { } /** * Adds a new animation element to this track */ public void addTrackElement(AnimationElement element) throws SVGElementException { TrackKey key = new TrackKey(element); TrackBase track = (TrackBase)tracks.get(key); if (track == null) { //Create a track for this element if (element instanceof Animate) { switch (((Animate)element).getDataType()) { case Animate.DT_REAL: track = new TrackDouble(element); break; case Animate.DT_COLOR: track = new TrackColor(element); break; case Animate.DT_PATH: track = new TrackPath(element); break; default: throw new RuntimeException(""); } } else if (element instanceof AnimateColor) { track = new TrackColor(element); } else if (element instanceof AnimateTransform || element instanceof AnimateMotion) { track = new TrackTransform(element); } tracks.put(key, track); } track.addElement(element); } public TrackBase getTrack(String name, int type) { //Handle AUTO, which will match either CSS or XML (in that order) if (type == AnimationElement.AT_AUTO) { TrackBase t = getTrack(name, AnimationElement.AT_CSS); if (t != null) return t; t = getTrack(name, AnimationElement.AT_XML); if (t != null) return t; return null; } //Get requested attribute TrackKey key = new TrackKey(name, type); TrackBase t = (TrackBase)tracks.get(key); if (t != null) return t; //If that didn't exist, see if one exists of type AUTO key = new TrackKey(name, AnimationElement.AT_AUTO); return (TrackBase)tracks.get(key); } public int getNumTracks() { return tracks.size(); } public Iterator iterator() { return tracks.values().iterator(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackDouble.java0000644000175000017500000000754210627134103030676 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 11:34 PM */ package com.kitfox.svg.animation; import com.kitfox.svg.xml.StyleAttribute; import java.util.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ public class TrackDouble extends TrackBase { public TrackDouble(AnimationElement ele) throws SVGElementException { super(ele.getParent(), ele); } public boolean getValue(StyleAttribute attrib, double curTime) { double val = getValue(curTime); if (Double.isNaN(val)) return false; attrib.setStringValue("" + val); return true; } public double getValue(double curTime) { double retVal = Double.NaN; StyleAttribute attr = null; switch (attribType) { case AnimationElement.AT_CSS: attr = parent.getStyleAbsolute(attribName); retVal = attr.getDoubleValue(); break; case AnimationElement.AT_XML: attr = parent.getPresAbsolute(attribName); retVal = attr.getDoubleValue(); break; case AnimationElement.AT_AUTO: attr = parent.getStyleAbsolute(attribName); if (attr == null) attr = parent.getPresAbsolute(attribName); retVal = attr.getDoubleValue(); break; } AnimationTimeEval state = new AnimationTimeEval(); // boolean pastEnd = true; for (Iterator it = animEvents.iterator(); it.hasNext();) { Animate ele = (Animate)it.next(); ele.evalParametric(state, curTime); //Go to next element if this one does not affect processing if (Double.isNaN(state.interp)) continue; switch (ele.getAdditiveType()) { case AnimationElement.AD_SUM: retVal += ele.eval(state.interp); break; case AnimationElement.AD_REPLACE: retVal = ele.eval(state.interp); break; } //Evalutae accumulation if applicable if (state.rep > 0) { switch (ele.getAccumulateType()) { case AnimationElement.AC_SUM: retVal += ele.repeatSkipSize(state.rep); break; } } } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackBase.java0000644000175000017500000000725211345751075030347 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 11:34 PM */ package com.kitfox.svg.animation; import java.util.*; import com.kitfox.svg.xml.*; import com.kitfox.svg.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ abstract public class TrackBase { protected final String attribName; protected final int attribType; //AnimationElement.AT_* /** Element we're animating */ protected final SVGElement parent; //It doesn't make sense to sort this, since some events will depend on // other events - in many cases, there will be no meaningful sorted order. final ArrayList animEvents = new ArrayList(); /** Creates a new instance of TrackManager */ // public TrackBase(SVGElement parent) // { // this(parent, "", AnimationElement.AT_AUTO); // } /** * Creates a track that would be valid for the name and type of element * passed in. Does not actually add this elemnt to the track. */ public TrackBase(SVGElement parent, AnimationElement ele) throws SVGElementException { this(parent, ele.getAttribName(), ele.getAttribType()); } public TrackBase(SVGElement parent, String attribName, int attribType) throws SVGElementException { this.parent = parent; this.attribName = attribName; this.attribType = attribType; //Make sure parent has an attribute we will write to if (attribType == AnimationElement.AT_AUTO && !parent.hasAttribute(attribName, AnimationElement.AT_CSS) && !parent.hasAttribute(attribName, AnimationElement.AT_XML)) { parent.addAttribute(attribName, AnimationElement.AT_CSS, ""); } else if (!parent.hasAttribute(attribName, attribType)) { parent.addAttribute(attribName, attribType, ""); } } public String getAttribName() { return attribName; } public int getAttribType() { return attribType; } public void addElement(AnimationElement ele) { animEvents.add(ele); } /** * Returns a StyleAttribute representing the value of this track at the * passed time. If this track does not apply, returns null. * @return - True if successful, false if a value could not be obtained */ abstract public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException; } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackTransform.java0000644000175000017500000001010610627134103031425 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 21, 2004, 11:34 PM */ package com.kitfox.svg.animation; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ public class TrackTransform extends TrackBase { public TrackTransform(AnimationElement ele) throws SVGElementException { super(ele.getParent(), ele); } public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException { AffineTransform retVal = new AffineTransform(); retVal = getValue(retVal, curTime); // AffineTransform val = getValue(curTime); // if (val == null) return false; double[] mat = new double[6]; retVal.getMatrix(mat); attrib.setStringValue("matrix(" + mat[0] + " " + mat[1] + " " + mat[2] + " " + mat[3] + " " + mat[4] + " " + mat[5] + ")"); return true; } public AffineTransform getValue(AffineTransform retVal, double curTime) throws SVGException { //Init transform with default state StyleAttribute attr = null; switch (attribType) { case AnimationElement.AT_CSS: attr = parent.getStyleAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; case AnimationElement.AT_XML: attr = parent.getPresAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; case AnimationElement.AT_AUTO: attr = parent.getStyleAbsolute(attribName); if (attr == null) attr = parent.getPresAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; } //Update transform with time based information AnimationTimeEval state = new AnimationTimeEval(); AffineTransform xform = new AffineTransform(); for (Iterator it = animEvents.iterator(); it.hasNext();) { AnimateXform ele = (AnimateXform)it.next(); ele.evalParametric(state, curTime); //Go to next element if this one does not affect processing if (Double.isNaN(state.interp)) continue; switch (ele.getAdditiveType()) { case AnimationElement.AD_SUM: retVal.concatenate(ele.eval(xform, state.interp)); break; case AnimationElement.AD_REPLACE: retVal.setTransform(ele.eval(xform, state.interp)); break; } } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackColor.java0000644000175000017500000000616510627134103030542 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 21, 2004, 11:34 PM */ package com.kitfox.svg.animation; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.util.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ public class TrackColor extends TrackBase { public TrackColor(AnimationElement ele) throws SVGElementException { super(ele.getParent(), ele); } public boolean getValue(StyleAttribute attrib, double curTime) { Color col = getValue(curTime); if (col == null) return false; attrib.setStringValue("#" + Integer.toHexString(col.getRGB())); return true; } public Color getValue(double curTime) { Color retVal = null; AnimationTimeEval state = new AnimationTimeEval(); for (Iterator it = animEvents.iterator(); it.hasNext();) { AnimateBase ele = (AnimateBase)it.next(); AnimateColorIface eleColor = (AnimateColorIface)ele; ele.evalParametric(state, curTime); //Reject value if it is in the invalid state if (Double.isNaN(state.interp)) continue; if (retVal == null) { retVal = eleColor.evalColor(state.interp); continue; } Color curCol = eleColor.evalColor(state.interp); switch (ele.getAdditiveType()) { case AnimationElement.AD_REPLACE: retVal = curCol; break; case AnimationElement.AD_SUM: retVal = new Color(curCol.getRed() + retVal.getRed(), curCol.getGreen() + retVal.getGreen(), curCol.getBlue() + retVal.getBlue()); break; } } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeCompound.java0000644000175000017500000000504711345751075031113 0ustar moonmoon/* * TimeDiscrete.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:33 AM */ package com.kitfox.svg.animation; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; /** * This represents a summation of other time elements. It is used for complex * timing events with offsets. * * @author Mark McKay * @author Mark McKay */ public class TimeCompound extends TimeBase { static final Pattern patPlus = Pattern.compile("\\+"); /** * This is a list of times. This element's time is calculated as the greatest * member that is less than the current time. */ final List componentTimes; private AnimationElement parent; /** Creates a new instance of TimeDiscrete */ public TimeCompound(List timeBases) { componentTimes = Collections.unmodifiableList(timeBases); } public double evalTime() { double agg = 0.0; for (Iterator it = componentTimes.iterator(); it.hasNext();) { TimeBase timeEle = (TimeBase)it.next(); double time = timeEle.evalTime(); agg += time; } return agg; } public void setParentElement(AnimationElement ele) { this.parent = ele; for (Iterator it = componentTimes.iterator(); it.hasNext();) { TimeBase timeEle = (TimeBase)it.next(); timeEle.setParentElement(ele); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateMotion.java0000644000175000017500000002070711345751075031254 0ustar moonmoon/* * Animate.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.PathIterator; import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * @author Mark McKay * @author Mark McKay */ public class AnimateMotion extends AnimateXform { static final Matcher matchPoint = Pattern.compile("\\s*(\\d+)[^\\d]+(\\d+)\\s*").matcher(""); // protected double fromValue; // protected double toValue; GeneralPath path; int rotateType = RT_ANGLE; double rotate; //Static angle to rotate by public static final int RT_ANGLE = 0; //Rotate by constant 'rotate' degrees public static final int RT_AUTO = 1; //Rotate to reflect tangent of position on path final ArrayList bezierSegs = new ArrayList(); double curveLength; /** Creates a new instance of Animate */ public AnimateMotion() { } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); //Motion element implies animating the transform element if (attribName == null) { attribName = "transform"; attribType = AT_AUTO; additiveType = AD_SUM; } String path = attrs.getValue("path"); if (path != null) { this.path = buildPath(path, GeneralPath.WIND_NON_ZERO); } //Now parse rotation style String rotate = attrs.getValue("rotate"); if (rotate != null) { if (rotate.equals("auto")) { this.rotateType = RT_AUTO; } else { try { this.rotate = Math.toRadians(Float.parseFloat(rotate)); } catch (Exception e) {} } } //Determine path String from = attrs.getValue("from"); String to = attrs.getValue("to"); buildPath(from, to); } protected static void setPoint(Point2D.Float pt, String x, String y) { try { pt.x = Float.parseFloat(x); } catch (Exception e) {}; try { pt.y = Float.parseFloat(y); } catch (Exception e) {}; } private void buildPath(String from, String to) { if (from != null && to != null) { Point2D.Float ptFrom = new Point2D.Float(), ptTo = new Point2D.Float(); matchPoint.reset(from); if (matchPoint.matches()) { setPoint(ptFrom, matchPoint.group(1), matchPoint.group(2)); } matchPoint.reset(to); if (matchPoint.matches()) { setPoint(ptFrom, matchPoint.group(1), matchPoint.group(2)); } if (ptFrom != null && ptTo != null) { path = new GeneralPath(); path.moveTo(ptFrom.x, ptFrom.y); path.lineTo(ptTo.x, ptTo.y); } } paramaterizePath(); } private void paramaterizePath() { bezierSegs.clear(); curveLength = 0; double[] coords = new double[6]; double sx = 0, sy = 0; for (PathIterator pathIt = path.getPathIterator(new AffineTransform()); !pathIt.isDone(); pathIt.next()) { Bezier bezier = null; int segType = pathIt.currentSegment(coords); switch (segType) { case PathIterator.SEG_LINETO: { bezier = new Bezier(sx, sy, coords, 1); sx = coords[0]; sy = coords[1]; break; } case PathIterator.SEG_QUADTO: { bezier = new Bezier(sx, sy, coords, 2); sx = coords[2]; sy = coords[3]; break; } case PathIterator.SEG_CUBICTO: { bezier = new Bezier(sx, sy, coords, 3); sx = coords[4]; sy = coords[5]; break; } case PathIterator.SEG_MOVETO: { sx = coords[0]; sy = coords[1]; break; } case PathIterator.SEG_CLOSE: //Do nothing break; } if (bezier != null) { bezierSegs.add(bezier); curveLength += bezier.getLength(); } } } /** * Evaluates this animation element for the passed interpolation time. Interp * must be on [0..1]. */ public AffineTransform eval(AffineTransform xform, double interp) { Point2D.Double point = new Point2D.Double(); if (interp >= 1) { Bezier last = (Bezier)bezierSegs.get(bezierSegs.size() - 1); last.getFinalPoint(point); xform.setToTranslation(point.x, point.y); return xform; } double curLength = curveLength * interp; for (Iterator it = bezierSegs.iterator(); it.hasNext();) { Bezier bez = (Bezier)it.next(); double bezLength = bez.getLength(); if (curLength < bezLength) { double param = curLength / bezLength; bez.eval(param, point); break; } curLength -= bezLength; } xform.setToTranslation(point.x, point.y); return xform; } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("path"))) { String strn = sty.getStringValue(); this.path = buildPath(strn, GeneralPath.WIND_NON_ZERO); } if (getPres(sty.setName("rotate"))) { String strn = sty.getStringValue(); if (strn.equals("auto")) { this.rotateType = RT_AUTO; } else { try { this.rotate = Math.toRadians(Float.parseFloat(strn)); } catch (Exception e) {} } } String from = null; if (getPres(sty.setName("from"))) { from = sty.getStringValue(); } String to = null; if (getPres(sty.setName("to"))) { to = sty.getStringValue(); } buildPath(from, to); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateColorIface.java0000644000175000017500000000235310627134103031777 0ustar moonmoon/* * AnimateColorIface.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 16, 2005, 6:24 AM */ package com.kitfox.svg.animation; import java.awt.*; /** * * @author kitfox */ public interface AnimateColorIface { public Color evalColor(double interp); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimationTimeEval.java0000644000175000017500000000370510627134103032042 0ustar moonmoon/* * AnimateTimeEval.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * * Created on September 21, 2004, 1:31 PM */ package com.kitfox.svg.animation; /** * * @author kitfox */ public class AnimationTimeEval { /** * Value on [0..1] representing the interpolation value of queried animation * element, or Double.NaN if element does not provide a valid evalutaion */ public double interp; /** * Number of completed repetitions */ public int rep; /** * True if this evaluation is in a frozen state; ie, past the end of the * track and held in the "freeze" state. */ // public boolean pastEnd; /** Creates a new instance of AnimateTimeEval */ public AnimationTimeEval() { } // public void set(double interp, int rep, boolean pastEnd) public void set(double interp, int rep) { this.interp = interp; this.rep = rep; // this.pastEnd = pastEnd; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateBase.java0000644000175000017500000001026111174160530030641 0ustar moonmoon/* * Animate.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.animation.parser.ParseException; import com.kitfox.svg.xml.StyleAttribute; import java.io.StringReader; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * @author Mark McKay * @author Mark McKay */ abstract public class AnimateBase extends AnimationElement { protected double repeatCount = Double.NaN; protected TimeBase repeatDur; /** Creates a new instance of Animate */ public AnimateBase() { } public void evalParametric(AnimationTimeEval state, double curTime) { evalParametric(state, curTime, repeatCount, repeatDur == null ? Double.NaN : repeatDur.evalTime()); } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); String repeatDurTime = attrs.getValue("repeatDur"); try { if (repeatDurTime != null) { helper.animTimeParser.ReInit(new StringReader(repeatDurTime)); this.repeatDur = helper.animTimeParser.Expr(); this.repeatDur.setParentElement(this); } } catch (Exception e) { throw new SAXException(e); } String strn = attrs.getValue("repeatCount"); if (strn == null) { repeatCount = 1; } else if ("indefinite".equals(strn)) { repeatCount = Double.POSITIVE_INFINITY; } else { try { repeatCount = Double.parseDouble(strn); } catch (Exception e) { repeatCount = Double.NaN; } } } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("repeatDur"))) { String strn = sty.getStringValue(); if (strn != null) { animTimeParser.ReInit(new StringReader(strn)); try { this.repeatDur = animTimeParser.Expr(); } catch (ParseException ex) { ex.printStackTrace(); } } } if (getPres(sty.setName("repeatCount"))) { String strn = sty.getStringValue(); if (strn == null) { repeatCount = 1; } else if ("indefinite".equals(strn)) { repeatCount = Double.POSITIVE_INFINITY; } else { try { repeatCount = Double.parseDouble(strn); } catch (Exception e) { repeatCount = Double.NaN; } } } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateTransform.java0000644000175000017500000002441511174160530031750 0ustar moonmoon/* * Animate.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.XMLParseUtil; import java.awt.geom.AffineTransform; import java.util.regex.Pattern; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * @author Mark McKay * @author Mark McKay */ public class AnimateTransform extends AnimateXform { // protected AffineTransform fromValue; // protected AffineTransform toValue; // protected double[] fromValue; //Transform parameters // protected double[] toValue; protected double[][] values; protected double[] keyTimes; public static final int AT_REPLACE = 0; public static final int AT_SUM = 1; protected int additive = AT_REPLACE; public static final int TR_TRANSLATE = 0; public static final int TR_ROTATE = 1; public static final int TR_SCALE = 2; public static final int TR_SKEWY = 3; public static final int TR_SKEWX = 4; public static final int TR_INVALID = 5; protected int xformType = TR_INVALID; /** Creates a new instance of Animate */ public AnimateTransform() { } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); //Type of matrix of transform. Should be one of the known names used to // define matrix transforms // valid types: translate, scale, rotate, skewX, skewY // 'matrix' not valid for animation String type = attrs.getValue("type").toLowerCase(); if (type.equals("translate")) xformType = TR_TRANSLATE; if (type.equals("rotate")) xformType = TR_ROTATE; if (type.equals("scale")) xformType = TR_SCALE; if (type.equals("skewx")) xformType = TR_SKEWX; if (type.equals("skewy")) xformType = TR_SKEWY; String fromStrn = attrs.getValue("from"); String toStrn = attrs.getValue("to"); if (fromStrn != null && toStrn != null) { //fromValue = parseSingleTransform(type + "(" + strn + ")"); double[] fromValue = XMLParseUtil.parseDoubleList(fromStrn); fromValue = validate(fromValue); // toValue = parseSingleTransform(type + "(" + strn + ")"); double[] toValue = XMLParseUtil.parseDoubleList(toStrn); toValue = validate(toValue); values = new double[][]{fromValue, toValue}; keyTimes = new double[]{0, 1}; } String keyTimeStrn = attrs.getValue("keyTimes"); String valuesStrn = attrs.getValue("values"); if (keyTimeStrn != null && valuesStrn != null) { keyTimes = XMLParseUtil.parseDoubleList(keyTimeStrn); String[] valueList = Pattern.compile(";").split(valuesStrn); values = new double[valueList.length][]; for (int i = 0; i < valueList.length; i++) { double[] list = XMLParseUtil.parseDoubleList(valueList[i]); values[i] = validate(list); } } //Check our additive state String additive = attrs.getValue("additive"); if (additive != null) { if (additive.equals("sum")) this.additive = AT_SUM; } } /** * Check list size against current xform type and ensure list * is expanded to a standard list size */ private double[] validate(double[] paramList) { switch (xformType) { case TR_SCALE: { if (paramList == null) { paramList = new double[]{1, 1}; } else if (paramList.length == 1) { paramList = new double[]{paramList[0], paramList[0]}; // double[] tmp = paramList; // paramList = new double[2]; // paramList[0] = paramList[1] = tmp[0]; } } } return paramList; } /** * Evaluates this animation element for the passed interpolation time. Interp * must be on [0..1]. */ public AffineTransform eval(AffineTransform xform, double interp) { int idx = 0; for (; idx < keyTimes.length - 1; idx++) { if (interp >= keyTimes[idx]) { idx--; if (idx < 0) idx = 0; break; } } double spanStartTime = keyTimes[idx]; double spanEndTime = keyTimes[idx + 1]; // double span = spanStartTime - spanEndTime; interp = (interp - spanStartTime) / (spanEndTime - spanStartTime); double[] fromValue = values[idx]; double[] toValue = values[idx + 1]; switch (xformType) { case TR_TRANSLATE: { double x = (1.0 - interp) * fromValue[0] + interp * toValue[0]; double y = (1.0 - interp) * fromValue[1] + interp * toValue[1]; xform.setToTranslation(x, y); break; } case TR_ROTATE: { double x1 = fromValue.length == 3 ? fromValue[1] : 0; double y1 = fromValue.length == 3 ? fromValue[2] : 0; double x2 = toValue.length == 3 ? toValue[1] : 0; double y2 = toValue.length == 3 ? toValue[2] : 0; double theta = (1.0 - interp) * fromValue[0] + interp * toValue[0]; double x = (1.0 - interp) * x1 + interp * x2; double y = (1.0 - interp) * y1 + interp * y2; xform.setToRotation(Math.toRadians(theta), x, y); break; } case TR_SCALE: { double x = (1.0 - interp) * fromValue[0] + interp * toValue[0]; double y = (1.0 - interp) * fromValue[1] + interp * toValue[1]; xform.setToScale(x, y); break; } case TR_SKEWX: { double x = (1.0 - interp) * fromValue[0] + interp * toValue[0]; xform.setToShear(Math.toRadians(x), 0.0); break; } case TR_SKEWY: { double y = (1.0 - interp) * fromValue[0] + interp * toValue[0]; xform.setToShear(0.0, Math.toRadians(y)); break; } default: xform.setToIdentity(); break; } return xform; } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("type"))) { String strn = sty.getStringValue().toLowerCase(); if (strn.equals("translate")) xformType = TR_TRANSLATE; if (strn.equals("rotate")) xformType = TR_ROTATE; if (strn.equals("scale")) xformType = TR_SCALE; if (strn.equals("skewx")) xformType = TR_SKEWX; if (strn.equals("skewy")) xformType = TR_SKEWY; } String fromStrn = null; if (getPres(sty.setName("from"))) { fromStrn = sty.getStringValue(); } String toStrn = null; if (getPres(sty.setName("to"))) { toStrn = sty.getStringValue(); } if (fromStrn != null && toStrn != null) { double[] fromValue = XMLParseUtil.parseDoubleList(fromStrn); fromValue = validate(fromValue); double[] toValue = XMLParseUtil.parseDoubleList(toStrn); toValue = validate(toValue); values = new double[][]{fromValue, toValue}; } String keyTimeStrn = null; if (getPres(sty.setName("keyTimes"))) { keyTimeStrn = sty.getStringValue(); } String valuesStrn = null; if (getPres(sty.setName("values"))) { valuesStrn = sty.getStringValue(); } if (keyTimeStrn != null && valuesStrn != null) { keyTimes = XMLParseUtil.parseDoubleList(keyTimeStrn); String[] valueList = Pattern.compile(";").split(valuesStrn); values = new double[valueList.length][]; for (int i = 0; i < valueList.length; i++) { double[] list = XMLParseUtil.parseDoubleList(valueList[i]); values[i] = validate(list); } } //Check our additive state if (getPres(sty.setName("additive"))) { String strn = sty.getStringValue().toLowerCase(); if (strn.equals("sum")) this.additive = AT_SUM; } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateColor.java0000644000175000017500000000643511174160530031055 0ustar moonmoon/* * Animate.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.xml.ColorTable; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Color; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * @author Mark McKay * @author Mark McKay */ public class AnimateColor extends AnimateBase implements AnimateColorIface { protected Color fromValue; protected Color toValue; /** Creates a new instance of Animate */ public AnimateColor() { } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); String strn = attrs.getValue("from"); fromValue = ColorTable.parseColor(strn); strn = attrs.getValue("to"); toValue = ColorTable.parseColor(strn); } /** * Evaluates this animation element for the passed interpolation time. Interp * must be on [0..1]. */ public Color evalColor(double interp) { int r1 = fromValue.getRed(); int g1 = fromValue.getGreen(); int b1 = fromValue.getBlue(); int r2 = toValue.getRed(); int g2 = toValue.getGreen(); int b2 = toValue.getBlue(); double invInterp = 1.0 - interp; return new Color((int)(r1 * invInterp + r2 * interp), (int)(g1 * invInterp + g2 * interp), (int)(b1 * invInterp + b2 * interp)); } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("from"))) { String strn = sty.getStringValue(); fromValue = ColorTable.parseColor(strn); } if (getPres(sty.setName("to"))) { String strn = sty.getStringValue(); toValue = ColorTable.parseColor(strn); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/Animate.java0000644000175000017500000003545111174160530030056 0ustar moonmoon/* * Animate.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.xml.ColorTable; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.XMLParseUtil; import java.awt.Color; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.PathIterator; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * Animate is a really annoying morphic tag that could represent a real value, * a color or a path * * @author Mark McKay * @author Mark McKay */ public class Animate extends AnimateBase implements AnimateColorIface { // StyleAttribute retAttrib = new StyleAttribute public static final int DT_REAL = 0; public static final int DT_COLOR = 1; public static final int DT_PATH = 2; int dataType = DT_REAL; protected double fromValue = Double.NaN; protected double toValue = Double.NaN; protected double byValue = Double.NaN; protected double[] valuesValue; protected Color fromColor = null; protected Color toColor = null; protected GeneralPath fromPath = null; protected GeneralPath toPath = null; /** Creates a new instance of Animate */ public Animate() { } public int getDataType() { return dataType; } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); String strn = attrs.getValue("from"); if (strn != null) { if (XMLParseUtil.isDouble(strn)) { fromValue = XMLParseUtil.parseDouble(strn); } // else if (attrs.getValue("attributeName").equals("d")) // { // fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD); // dataType = DT_PATH; // } else { fromColor = ColorTable.parseColor(strn); if (fromColor == null) { //Try path fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD); dataType = DT_PATH; } else dataType = DT_COLOR; } } strn = attrs.getValue("to"); if (strn != null) { if (XMLParseUtil.isDouble(strn)) { toValue = XMLParseUtil.parseDouble(strn); } else { toColor = ColorTable.parseColor(strn); if (toColor == null) { //Try path toPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD); dataType = DT_PATH; } else dataType = DT_COLOR; } } strn = attrs.getValue("by"); try { if (strn != null) byValue = XMLParseUtil.parseDouble(strn); } catch (Exception e) {} strn = attrs.getValue("values"); try { if (strn != null) valuesValue = XMLParseUtil.parseDoubleList(strn); } catch (Exception e) {} } /** * Evaluates this animation element for the passed interpolation time. Interp * must be on [0..1]. */ public double eval(double interp) { boolean fromExists = !Double.isNaN(fromValue); boolean toExists = !Double.isNaN(toValue); boolean byExists = !Double.isNaN(byValue); boolean valuesExists = valuesValue != null; if (valuesExists) { double sp = interp * valuesValue.length; int ip = (int)sp; double fp = sp - ip; int i0 = ip; int i1 = ip + 1; if (i0 < 0) return valuesValue[0]; if (i1 >= valuesValue.length) return valuesValue[valuesValue.length - 1]; return valuesValue[i0] * (1 - fp) + valuesValue[i1] * fp; } else if (fromExists && toExists) { return toValue * interp + fromValue * (1.0 - interp); } else if (fromExists && byExists) { return fromValue + byValue * interp; } else if (toExists && byExists) { return toValue - byValue * (1.0 - interp); } else if (byExists) { return byValue * interp; } //Should not reach this line throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements"); } public Color evalColor(double interp) { if (fromColor == null && toColor != null) { float[] toCol = new float[3]; toColor.getColorComponents(toCol); return new Color(toCol[0] * (float)interp, toCol[1] * (float)interp, toCol[2] * (float)interp); } else if (fromColor != null && toColor != null) { float nInterp = 1 - (float)interp; float[] fromCol = new float[3]; float[] toCol = new float[3]; fromColor.getColorComponents(fromCol); toColor.getColorComponents(toCol); return new Color(fromCol[0] * nInterp + toCol[0] * (float)interp, fromCol[1] * nInterp + toCol[1] * (float)interp, fromCol[2] * nInterp + toCol[2] * (float)interp); } throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements"); } public GeneralPath evalPath(double interp) { if (fromPath == null && toPath != null) { PathIterator itTo = toPath.getPathIterator(new AffineTransform()); GeneralPath midPath = new GeneralPath(); float[] coordsTo = new float[6]; for (; !itTo.isDone(); itTo.next()) { int segTo = itTo.currentSegment(coordsTo); switch (segTo) { case PathIterator.SEG_CLOSE: midPath.closePath(); break; case PathIterator.SEG_CUBICTO: midPath.curveTo( (float)(coordsTo[0] * interp), (float)(coordsTo[1] * interp), (float)(coordsTo[2] * interp), (float)(coordsTo[3] * interp), (float)(coordsTo[4] * interp), (float)(coordsTo[5] * interp) ); break; case PathIterator.SEG_LINETO: midPath.lineTo( (float)(coordsTo[0] * interp), (float)(coordsTo[1] * interp) ); break; case PathIterator.SEG_MOVETO: midPath.moveTo( (float)(coordsTo[0] * interp), (float)(coordsTo[1] * interp) ); break; case PathIterator.SEG_QUADTO: midPath.quadTo( (float)(coordsTo[0] * interp), (float)(coordsTo[1] * interp), (float)(coordsTo[2] * interp), (float)(coordsTo[3] * interp) ); break; } } return midPath; } else if (toPath != null) { PathIterator itFrom = fromPath.getPathIterator(new AffineTransform()); PathIterator itTo = toPath.getPathIterator(new AffineTransform()); GeneralPath midPath = new GeneralPath(); float[] coordsFrom = new float[6]; float[] coordsTo = new float[6]; for (; !itFrom.isDone(); itFrom.next()) { int segFrom = itFrom.currentSegment(coordsFrom); int segTo = itTo.currentSegment(coordsTo); if (segFrom != segTo) { throw new RuntimeException("Path shape mismatch"); } switch (segFrom) { case PathIterator.SEG_CLOSE: midPath.closePath(); break; case PathIterator.SEG_CUBICTO: midPath.curveTo( (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp), (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp), (float)(coordsFrom[2] * (1 - interp) + coordsTo[2] * interp), (float)(coordsFrom[3] * (1 - interp) + coordsTo[3] * interp), (float)(coordsFrom[4] * (1 - interp) + coordsTo[4] * interp), (float)(coordsFrom[5] * (1 - interp) + coordsTo[5] * interp) ); break; case PathIterator.SEG_LINETO: midPath.lineTo( (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp), (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp) ); break; case PathIterator.SEG_MOVETO: midPath.moveTo( (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp), (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp) ); break; case PathIterator.SEG_QUADTO: midPath.quadTo( (float)(coordsFrom[0] * (1 - interp) + coordsTo[0] * interp), (float)(coordsFrom[1] * (1 - interp) + coordsTo[1] * interp), (float)(coordsFrom[2] * (1 - interp) + coordsTo[2] * interp), (float)(coordsFrom[3] * (1 - interp) + coordsTo[3] * interp) ); break; } } return midPath; } throw new RuntimeException("Animate tag could not be evalutated - insufficient arguements"); } /** * If this element is being accumulated, detemine the delta to accumulate by */ public double repeatSkipSize(int reps) { boolean fromExists = !Double.isNaN(fromValue); boolean toExists = !Double.isNaN(toValue); boolean byExists = !Double.isNaN(byValue); if (fromExists && toExists) { return (toValue - fromValue) * reps; } else if (fromExists && byExists) { return (fromValue + byValue) * reps; } else if (toExists && byExists) { return toValue * reps; } else if (byExists) { return byValue * reps; } //Should not reach this line return 0; } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("from"))) { String strn = sty.getStringValue(); if (XMLParseUtil.isDouble(strn)) { fromValue = XMLParseUtil.parseDouble(strn); } else { fromColor = ColorTable.parseColor(strn); if (fromColor == null) { //Try path fromPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD); dataType = DT_PATH; } else dataType = DT_COLOR; } } if (getPres(sty.setName("to"))) { String strn = sty.getStringValue(); if (XMLParseUtil.isDouble(strn)) { toValue = XMLParseUtil.parseDouble(strn); } else { toColor = ColorTable.parseColor(strn); if (toColor == null) { //Try path toPath = this.buildPath(strn, GeneralPath.WIND_EVEN_ODD); dataType = DT_PATH; } else dataType = DT_COLOR; } } if (getPres(sty.setName("by"))) { String strn = sty.getStringValue(); if (strn != null) byValue = XMLParseUtil.parseDouble(strn); } if (getPres(sty.setName("values"))) { String strn = sty.getStringValue(); if (strn != null) valuesValue = XMLParseUtil.parseDoubleList(strn); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/Bezier.java0000644000175000017500000001302210627134103027705 0ustar moonmoon/* * Bezier.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 14, 2005, 4:08 AM */ package com.kitfox.svg.animation; import java.awt.geom.*; /** * http://mathworld.wolfram.com/BezierCurve.html * @author kitfox */ public class Bezier { double length; double[] coord; public Bezier(double sx, double sy, double[] coords, int numCoords) { setCoords(sx, sy, coords, numCoords); } public void setCoords(double sx, double sy, double[] coords, int numCoords) { coord = new double[numCoords * 2 + 2]; coord[0] = sx; coord[1] = sy; for (int i = 0; i < numCoords; i++) { coord[i * 2 + 2] = coords[i * 2]; coord[i * 2 + 3] = coords[i * 2 + 1]; } calcLength(); } /** * Retuns aproximation of the length of the bezier */ public double getLength() { return length; } private void calcLength() { length = 0; for (int i = 2; i < coord.length; i += 2) { length += lineLength(coord[i - 2], coord[i - 1], coord[i], coord[i + 1]); } } private double lineLength(double x1, double y1, double x2, double y2) { double dx = x2 - x1, dy = y2 - y1; return Math.sqrt(dx * dx + dy * dy); } public Point2D.Double getFinalPoint(Point2D.Double point) { point.x = coord[coord.length - 2]; point.y = coord[coord.length - 1]; return point; } public Point2D.Double eval(double param, Point2D.Double point) { point.x = 0; point.y = 0; int numKnots = coord.length / 2; for (int i = 0; i < numKnots; i++) { double scale = bernstein(numKnots - 1, i, param); point.x += coord[i * 2] * scale; point.y += coord[i * 2 + 1] * scale; } return point; } /** * Calculates the bernstein polynomial for evaluating parametric bezier * @param numKnots - one less than number of knots in this curve hull * @param knotNo - knot we are evaluating Bernstein for * @param param - Parametric value we are evaluating at */ private double bernstein(int numKnots, int knotNo, double param) { double iParam = 1 - param; //Faster evaluation for easy cases: switch (numKnots) { case 0: return 1; case 1: { switch (knotNo) { case 0: return iParam; case 1: return param; } break; } case 2: { switch (knotNo) { case 0: return iParam * iParam; case 1: return 2 * iParam * param; case 2: return param * param; } break; } case 3: { switch (knotNo) { case 0: return iParam * iParam * iParam; case 1: return 3 * iParam * iParam * param; case 2: return 3 * iParam * param * param; case 3: return param * param * param; } break; } } //If this bezier has more than four points, calculate bernstein the hard way double retVal = 1; for (int i = 0; i < knotNo; i++) { retVal *= param; } for (int i = 0; i < numKnots - knotNo; i++) { retVal *= iParam; } retVal *= choose(numKnots, knotNo); return retVal; } private int choose(int num, int denom) { int denom2 = num - denom; if (denom < denom2) { int tmp = denom; denom = denom2; denom2 = tmp; } int prod = 1; for (int i = num; i > denom; i--) { prod *= num; } for (int i = 2; i <= denom2; i++) { prod /= i; } return prod; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/SetSmil.java0000644000175000017500000000440511174160530030053 0ustar moonmoon/* * Set.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:51 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.xml.StyleAttribute; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * Set is used to set a textual value; most likely for a style element. * * @author Mark McKay * @author Mark McKay */ public class SetSmil extends AnimationElement { String toValue; /** Creates a new instance of Set */ public SetSmil() { } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); toValue = attrs.getValue("to"); } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { super.rebuild(animTimeParser); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("to"))) { String newVal = sty.getStringValue(); toValue = newVal; } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeDiscrete.java0000644000175000017500000000306510627134103031054 0ustar moonmoon/* * TimeDiscrete.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:33 AM */ package com.kitfox.svg.animation; /** * This is a time that represents a specific number of milliseconds * * @author Mark McKay * @author Mark McKay */ public class TimeDiscrete extends TimeBase { //Milliseconds of delay double secs; /** Creates a new instance of TimeDiscrete */ public TimeDiscrete(double secs) { this.secs = secs; } public double evalTime() { return secs; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackPath.java0000644000175000017500000000647510627134103030364 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 21, 2004, 11:34 PM */ package com.kitfox.svg.animation; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.pathcmd.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ public class TrackPath extends TrackBase { public TrackPath(AnimationElement ele) throws SVGElementException { super(ele.getParent(), ele); } public boolean getValue(StyleAttribute attrib, double curTime) { GeneralPath path = getValue(curTime); if (path == null) return false; attrib.setStringValue(PathUtil.buildPathString(path)); return true; } public GeneralPath getValue(double curTime) { GeneralPath retVal = null; AnimationTimeEval state = new AnimationTimeEval(); for (Iterator it = animEvents.iterator(); it.hasNext();) { AnimateBase ele = (AnimateBase)it.next(); Animate eleAnim = (Animate)ele; ele.evalParametric(state, curTime); //Reject value if it is in the invalid state if (Double.isNaN(state.interp)) continue; if (retVal == null) { retVal = eleAnim.evalPath(state.interp); continue; } GeneralPath curPath = eleAnim.evalPath(state.interp); switch (ele.getAdditiveType()) { case AnimationElement.AD_REPLACE: retVal = curPath; break; case AnimationElement.AD_SUM: throw new RuntimeException("Not implemented"); // retVal = new Color(curCol.getRed() + retVal.getRed(), curCol.getGreen() + retVal.getGreen(), curCol.getBlue() + retVal.getBlue()); // break; default: throw new RuntimeException(); } } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeSum.java0000644000175000017500000000354010627134103030054 0ustar moonmoon/* * TimeDiscrete.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:33 AM */ package com.kitfox.svg.animation; /** * This is a time that represents a specific number of milliseconds * * @author Mark McKay * @author Mark McKay */ public class TimeSum extends TimeBase { //Milliseconds of delay TimeBase t1; TimeBase t2; boolean add; /** Creates a new instance of TimeDiscrete */ public TimeSum(TimeBase t1, TimeBase t2, boolean add) { this.t1 = t1; this.t2 = t2; this.add = add; } public double evalTime() { return add ? t1.evalTime() + t2.evalTime() : t1.evalTime() - t2.evalTime(); } public void setParentElement(AnimationElement ele) { t1.setParentElement(ele); t2.setParentElement(ele); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimTimeParser.jjt0000644000175000017500000001147011345751075031233 0ustar moonmoon/** */ options { MULTI=true; STATIC=false; } PARSER_BEGIN(AnimTimeParser) package com.kitfox.svg.animation.parser; import java.util.*; import java.io.*; import com.kitfox.svg.animation.*; public class AnimTimeParser { /** * Test the parser */ public static void main(String args[]) throws ParseException { // AnimTimeParser parser = new AnimTimeParser(System.in); StringReader reader; reader = new StringReader("1:30 + 5ms"); AnimTimeParser parser = new AnimTimeParser(reader); TimeBase tc; tc = parser.Expr(); System.err.println("AnimTimeParser eval to " + tc.evalTime()); reader = new StringReader("19"); parser.ReInit(reader); tc = parser.Expr(); System.err.println("AnimTimeParser eval to " + tc.evalTime()); } } PARSER_END(AnimTimeParser) /** * Tokens */ SKIP : /* WHITE SPACE */ { " " | "\t" | "\n" | "\r" | "\f" } TOKEN : { < #LETTER: [ "a"-"z", "A"-"Z" ] > | < #DIGIT: [ "0"-"9"] > | < INTEGER: ()+ > | < FLOAT: (["+", "-"])? ((()* "." ()+) | (()+)) (["E", "e"] (["+", "-"])? ()+)? > | < INDEFINITE: "indefinite" > | < MOUSE_OVER: "mouseover" > | < WHEN_NOT_ACTIVE: "whenNotActive" > | < UNITS: "ms" | "s" | "min" | "h" > | < IDENTIFIER: (||"_"|"-")* > } /** * Expression structure */ TimeBase Expr() : { TimeBase term; ArrayList list = new ArrayList(); } { ( term = Sum() { list.add(term); } )? ( LOOKAHEAD(2) ";" term = Sum() { list.add(term); } ) * (";")? { switch (list.size()) { case 0: return new TimeIndefinite(); case 1: return (TimeBase)list.get(0); default: return new TimeCompound(list); } } } TimeBase Sum() : { Token t = null; TimeBase t1; TimeBase t2 = null; } { t1=Term() ( (t="+" | t="-") t2 = Term() )? { if (t2 == null) return t1; if (t.image.equals("-")) { return new TimeSum(t1, t2, false); } else { return new TimeSum(t1, t2, true); } } } TimeBase Term() : { TimeBase base; } { base=IndefiniteTime() { return base; } | base=LiteralTime() { return base; } | base=LookupTime() { return base; } | base=EventTime() { return base; } } TimeIndefinite IndefiniteTime() : {} { { return new TimeIndefinite(); } } TimeDiscrete EventTime() : {} { ( | ) { //For now, map all events to the zero time return new TimeDiscrete(0); } } TimeDiscrete LiteralTime() : { double t1, t2, t3 = Double.NaN, value; Token t; } { t1=Number() { value = t1; } ( (":" t2=Number() (":" t3=Number())? { //Return clock time format (convert to seconds) if (Double.isNaN(t3)) { value = t1 * 60 + t2; } else { value = t1 * 3600 + t2 * 60 + t3; } } ) | (t= { //Return units format (convert to seconds) if (t.image.equals("ms")) value = t1 / 1000; if (t.image.equals("min")) value = t1 * 60; if (t.image.equals("h")) value = t1 * 3600; } ) )? { return new TimeDiscrete(value); } } TimeLookup LookupTime() : { double paramNum = 0.0; Token node, event; } { node= "." event= (paramNum=ParamList())? { return new TimeLookup(null, node.image, event.image, "" + paramNum); } } double ParamList() : { double num; } { "(" num=Number() ")" { return num; } } double Number() : { Token t; } { t= { try { return Double.parseDouble(t.image); } catch (Exception e) { e.printStackTrace(); } return 0.0; } | t= { try { return Double.parseDouble(t.image); } catch (Exception e) { e.printStackTrace(); } return 0.0; } } int Integer() : { Token t; } { t= { try { return Integer.parseInt(t.image); } catch (Exception e) { e.printStackTrace(); } return 0; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeLookup.java0000644000175000017500000000416010627134103030560 0ustar moonmoon/* * TimeDiscrete.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:33 AM */ package com.kitfox.svg.animation; /** * This is a time that represents a specific number of milliseconds * * @author Mark McKay * @author Mark McKay */ public class TimeLookup extends TimeBase { /** * This time can only be resolved in relation to it's parent */ private AnimationElement parent; /** * Node this lookup acts upon */ String node; /** * Event to evalutae on this node */ String event; /** * Optional parameter used by some events */ String paramList; /** Creates a new instance of TimeDiscrete */ public TimeLookup(AnimationElement parent, String node, String event, String paramList) { this.parent = parent; this.node = node; this.event = event; this.paramList = paramList; } public double evalTime() { return 0.0; } public void setParentElement(AnimationElement ele) { parent = ele; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeBase.java0000644000175000017500000000646110627134103030167 0ustar moonmoon/* * TimeBase.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:31 AM */ package com.kitfox.svg.animation; import java.util.regex.*; /** * SVG has a complicated way of specifying time. Potentially, a time could * be represened as a summation of discrete times and times of other animation * events. This provides a root for the many elements we will need to define * time. * * @author Mark McKay * @author Mark McKay */ abstract public class TimeBase { static final Matcher matchIndefinite = Pattern.compile("\\s*indefinite\\s*").matcher(""); static final Matcher matchUnitTime = Pattern.compile("\\s*([-+]?((\\d*\\.\\d+)|(\\d+))([-+]?[eE]\\d+)?)\\s*(h|min|s|ms)?\\s*").matcher(""); /* public static TimeBase parseTime(String text) { if (text == null) return null; if (text.indexOf('+') == -1) { return parseTimeComponent(text); } return new TimeCompound(text); } */ protected static TimeBase parseTimeComponent(String text) { matchIndefinite.reset(text); if (matchIndefinite.matches()) return new TimeIndefinite(); matchUnitTime.reset(text); if (matchUnitTime.matches()) { String val = matchUnitTime.group(1); String units = matchUnitTime.group(6); double time = 0; try { time = Double.parseDouble(val); } catch (Exception e) {} if (units.equals("ms")) time *= .001; else if (units.equals("min")) time *= 60; else if (units.equals("h")) time *= 3600; return new TimeDiscrete(time); } return null; } /** * Calculates the (greater than or equal to 0) time in seconds this * time represents. If the time cannot be determined, returns * Double.NaN. If this represents an infinte amount of time, returns * Double.POSITIVE_INFINITY. */ abstract public double evalTime(); /** * Some time elements need to refer to the animation element that contains * them to evaluate correctly */ public void setParentElement(AnimationElement ele) { } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimationElement.java0000644000175000017500000003327011174160530031726 0ustar moonmoon/* * AnimateEle.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 2:52 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGLoaderHelper; import com.kitfox.svg.animation.parser.AnimTimeParser; import com.kitfox.svg.animation.parser.ParseException; import com.kitfox.svg.xml.StyleAttribute; import java.io.StringReader; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * @author Mark McKay * @author Mark McKay */ public abstract class AnimationElement extends SVGElement { protected String attribName; // protected String attribType; protected int attribType = AT_AUTO; public static final int AT_CSS = 0; public static final int AT_XML = 1; public static final int AT_AUTO = 2; //Check CSS first, then XML protected TimeBase beginTime; protected TimeBase durTime; protected TimeBase endTime; protected int fillType = FT_AUTO; /** More about the fill attribute */ public static final int FT_REMOVE = 0; public static final int FT_FREEZE = 1; public static final int FT_HOLD = 2; public static final int FT_TRANSITION = 3; public static final int FT_AUTO = 4; public static final int FT_DEFAULT = 5; /** Additive state of track */ public static final int AD_REPLACE = 0; public static final int AD_SUM = 1; int additiveType = AD_REPLACE; /** Accumlative state */ public static final int AC_REPLACE = 0; public static final int AC_SUM = 1; int accumulateType = AC_REPLACE; /** Creates a new instance of AnimateEle */ public AnimationElement() { } public static String animationElementToString(int attrValue) { switch (attrValue) { case AT_CSS: return "CSS"; case AT_XML: return "XML"; case AT_AUTO: return "AUTO"; default: throw new RuntimeException("Unknown element type"); } } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Load style string super.loaderStartElement(helper, attrs, parent); attribName = attrs.getValue("attributeName"); String attribType = attrs.getValue("attributeType"); if (attribType != null) { attribType = attribType.toLowerCase(); if (attribType.equals("css")) this.attribType = AT_CSS; else if (attribType.equals("xml")) this.attribType = AT_XML; } String beginTime = attrs.getValue("begin"); String durTime = attrs.getValue("dur"); String endTime = attrs.getValue("end"); try { if (beginTime != null) { helper.animTimeParser.ReInit(new StringReader(beginTime)); this.beginTime = helper.animTimeParser.Expr(); this.beginTime.setParentElement(this); } if (durTime != null) { helper.animTimeParser.ReInit(new StringReader(durTime)); this.durTime = helper.animTimeParser.Expr(); this.durTime.setParentElement(this); } if (endTime != null) { helper.animTimeParser.ReInit(new StringReader(endTime)); this.endTime = helper.animTimeParser.Expr(); this.endTime.setParentElement(this); } } catch (Exception e) { throw new SAXException(e); } // this.beginTime = TimeBase.parseTime(beginTime); // this.durTime = TimeBase.parseTime(durTime); // this.endTime = TimeBase.parseTime(endTime); String fill = attrs.getValue("fill"); if (fill != null) { if (fill.equals("remove")) this.fillType = FT_REMOVE; if (fill.equals("freeze")) this.fillType = FT_FREEZE; if (fill.equals("hold")) this.fillType = FT_HOLD; if (fill.equals("transiton")) this.fillType = FT_TRANSITION; if (fill.equals("auto")) this.fillType = FT_AUTO; if (fill.equals("default")) this.fillType = FT_DEFAULT; } String additiveStrn = attrs.getValue("additive"); if (additiveStrn != null) { if (additiveStrn.equals("replace")) this.additiveType = AD_REPLACE; if (additiveStrn.equals("sum")) this.additiveType = AD_SUM; } String accumulateStrn = attrs.getValue("accumulate"); if (accumulateStrn != null) { if (accumulateStrn.equals("replace")) this.accumulateType = AC_REPLACE; if (accumulateStrn.equals("sum")) this.accumulateType = AC_SUM; } } public String getAttribName() { return attribName; } public int getAttribType() { return attribType; } public int getAdditiveType() { return additiveType; } public int getAccumulateType() { return accumulateType; } public void evalParametric(AnimationTimeEval state, double curTime) { evalParametric(state, curTime, Double.NaN, Double.NaN); } /** * Compares current time to start and end times and determines what degree * of time interpolation this track currently represents. Returns * Float.NaN if this track cannot be evaluated at the passed time (ie, * it is before or past the end of the track, or it depends upon * an unknown event) * @param state - A structure that will be filled with information * regarding the applicability of this animatoin element at the passed * time. * @param curTime - Current time in seconds * @param repeatCount - Optional number of repetitions of length 'dur' to * do. Set to Double.NaN to not consider this in the calculation. * @param repeatDur - Optional amoun tof time to repeat the animaiton. * Set to Double.NaN to not consider this in the calculation. */ protected void evalParametric(AnimationTimeEval state, double curTime, double repeatCount, double repeatDur) { double begin = (beginTime == null) ? 0 : beginTime.evalTime(); if (Double.isNaN(begin) || begin > curTime) { state.set(Double.NaN, 0); return; } double dur = (durTime == null) ? Double.NaN : durTime.evalTime(); if (Double.isNaN(dur)) { state.set(Double.NaN, 0); return; } //Determine end point of this animation double end = (endTime == null) ? Double.NaN : endTime.evalTime(); double repeat; // if (Double.isNaN(repeatDur)) // { // repeatDur = dur; // } if (Double.isNaN(repeatCount) && Double.isNaN(repeatDur)) { repeat = Double.NaN; } else { repeat = Math.min( Double.isNaN(repeatCount) ? Double.POSITIVE_INFINITY : dur * repeatCount, Double.isNaN(repeatDur) ? Double.POSITIVE_INFINITY : repeatDur); } if (Double.isNaN(repeat) && Double.isNaN(end)) { //If neither and end point nor a repeat is specified, end point is // implied by duration. end = begin + dur; } double finishTime; if (Double.isNaN(end)) { finishTime = begin + repeat; } else if (Double.isNaN(repeat)) { finishTime = end; } else { finishTime = Math.min(end, repeat); } double evalTime = Math.min(curTime, finishTime); // if (curTime > finishTime) evalTime = finishTime; // double evalTime = curTime; // boolean pastEnd = curTime > evalTime; // if (!Double.isNaN(end) && curTime > end) { pastEnd = true; evalTime = Math.min(evalTime, end); } // if (!Double.isNaN(repeat) && curTime > repeat) { pastEnd = true; evalTime = Math.min(evalTime, repeat); } double ratio = (evalTime - begin) / dur; int rep = (int)ratio; double interp = ratio - rep; //Adjust for roundoff if (interp < 0.00001) interp = 0; // state.set(interp, rep); // if (!pastEnd) // { // state.set(interp, rep, false); // return; // } //If we are still within the clip, return value if (curTime == evalTime) { state.set(interp, rep); return; } //We are past end of clip. Determine to clamp or ignore. switch (fillType) { default: case FT_REMOVE: case FT_AUTO: case FT_DEFAULT: state.set(Double.NaN, rep); return; case FT_FREEZE: case FT_HOLD: case FT_TRANSITION: state.set(interp == 0 ? 1 : interp, rep); return; } } double evalStartTime() { return beginTime == null ? Double.NaN : beginTime.evalTime(); } double evalDurTime() { return durTime == null ? Double.NaN : durTime.evalTime(); } /** * Evaluates the ending time of this element. Returns 0 if not specified. * * @see hasEndTime */ double evalEndTime() { return endTime == null ? Double.NaN : endTime.evalTime(); } /** * Checks to see if an end time has been specified for this element. */ boolean hasEndTime() { return endTime != null; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) { //Animation elements to not change with time return false; } public void rebuild() throws SVGException { AnimTimeParser animTimeParser = new AnimTimeParser(new StringReader("")); rebuild(animTimeParser); } protected void rebuild(AnimTimeParser animTimeParser) throws SVGException { StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("begin"))) { String newVal = sty.getStringValue(); animTimeParser.ReInit(new StringReader(newVal)); try { this.beginTime = animTimeParser.Expr(); } catch (ParseException ex) { ex.printStackTrace(); } } if (getPres(sty.setName("dur"))) { String newVal = sty.getStringValue(); animTimeParser.ReInit(new StringReader(newVal)); try { this.durTime = animTimeParser.Expr(); } catch (ParseException ex) { ex.printStackTrace(); } } if (getPres(sty.setName("end"))) { String newVal = sty.getStringValue(); animTimeParser.ReInit(new StringReader(newVal)); try { this.endTime = animTimeParser.Expr(); } catch (ParseException ex) { ex.printStackTrace(); } } if (getPres(sty.setName("fill"))) { String newVal = sty.getStringValue(); if (newVal.equals("remove")) this.fillType = FT_REMOVE; if (newVal.equals("freeze")) this.fillType = FT_FREEZE; if (newVal.equals("hold")) this.fillType = FT_HOLD; if (newVal.equals("transiton")) this.fillType = FT_TRANSITION; if (newVal.equals("auto")) this.fillType = FT_AUTO; if (newVal.equals("default")) this.fillType = FT_DEFAULT; } if (getPres(sty.setName("additive"))) { String newVal = sty.getStringValue(); if (newVal.equals("replace")) this.additiveType = AD_REPLACE; if (newVal.equals("sum")) this.additiveType = AD_SUM; } if (getPres(sty.setName("accumulate"))) { String newVal = sty.getStringValue(); if (newVal.equals("replace")) this.accumulateType = AC_REPLACE; if (newVal.equals("sum")) this.accumulateType = AC_SUM; } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/AnimateXform.java0000644000175000017500000000327311174160530031067 0ustar moonmoon/* * AnimateXform.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 14, 2005, 6:46 AM */ package com.kitfox.svg.animation; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGLoaderHelper; import java.awt.geom.AffineTransform; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * * @author kitfox */ abstract public class AnimateXform extends AnimateBase { public AnimateXform() { } public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { super.loaderStartElement(helper, attrs, parent); } abstract public AffineTransform eval(AffineTransform xform, double interp); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TrackMotion.java0000644000175000017500000001113110627134103030716 0ustar moonmoon/* * TrackManager.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 21, 2004, 11:34 PM */ package com.kitfox.svg.animation; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.*; /** * A track holds the animation events for a single parameter of a single SVG * element. It also contains the default value for the element, should the * user want to see the 'unanimated' value. * * @author Mark McKay * @author Mark McKay */ public class TrackMotion extends TrackBase { public TrackMotion(AnimationElement ele) throws SVGElementException { //The motion element implies a CSS attribute of transform // super(ele.getParent(), "transform", AnimationElement.AT_CSS); super(ele.getParent(), ele); } public boolean getValue(StyleAttribute attrib, double curTime) throws SVGException { AffineTransform retVal = new AffineTransform(); retVal = getValue(retVal, curTime); // AffineTransform val = getValue(curTime); // if (val == null) return false; double[] mat = new double[6]; retVal.getMatrix(mat); attrib.setStringValue("matrix(" + mat[0] + " " + mat[1] + " " + mat[2] + " " + mat[3] + " " + mat[4] + " " + mat[5] + ")"); return true; } public AffineTransform getValue(AffineTransform retVal, double curTime) throws SVGException { //Init transform with default state StyleAttribute attr = null; switch (attribType) { case AnimationElement.AT_CSS: attr = parent.getStyleAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; case AnimationElement.AT_XML: attr = parent.getPresAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; case AnimationElement.AT_AUTO: attr = parent.getStyleAbsolute(attribName); if (attr == null) attr = parent.getPresAbsolute(attribName); retVal.setTransform(SVGElement.parseSingleTransform(attr.getStringValue())); break; } //Update transform with time based information AnimationTimeEval state = new AnimationTimeEval(); AffineTransform xform = new AffineTransform(); // boolean pastEnd = true; for (Iterator it = animEvents.iterator(); it.hasNext();) { AnimateMotion ele = (AnimateMotion)it.next(); ele.evalParametric(state, curTime); //Go to next element if this one does not affect processing if (Double.isNaN(state.interp)) continue; switch (ele.getAdditiveType()) { case AnimationElement.AD_SUM: retVal.concatenate(ele.eval(xform, state.interp)); break; case AnimationElement.AD_REPLACE: retVal.setTransform(ele.eval(xform, state.interp)); break; } //Evaluate accumulation if applicable /* if (state.rep > 0) { switch (ele.getAccumulateType()) { case AnimationElement.AC_SUM: retVal += ele.repeatSkipSize(state.rep); break; } } */ } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/animation/TimeIndefinite.java0000644000175000017500000000276110627134103031372 0ustar moonmoon/* * TimeDiscrete.java * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on August 15, 2004, 3:33 AM */ package com.kitfox.svg.animation; /** * This represents the indefinite (infinite) amount of time. * * @author Mark McKay * @author Mark McKay */ public class TimeIndefinite extends TimeBase { /** Creates a new instance of TimeDiscrete */ public TimeIndefinite() { } public double evalTime() { return Double.POSITIVE_INFINITY; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FillElement.java0000644000175000017500000000334410627134103026714 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import java.awt.*; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ abstract public class FillElement extends SVGElement { /** Creates a new instance of FillElement */ public FillElement() { } /** * Requests the paint defined by this element. Passes in information * to allow paint to be customized * @param bounds - bounding box of shape being rendered * @param xform - The current transformation that the shape is being rendered * under. */ abstract public Paint getPaint(Rectangle2D bounds, AffineTransform xform); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Style.java0000644000175000017500000000455010627134103025614 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 19, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * Holds title textual information within tree * * @author Mark McKay * @author Mark McKay */ public class Style extends SVGElement { //Should be set to "text/css" String type; StringBuffer text = new StringBuffer(); /** Creates a new instance of Stop */ public Style() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); this.type = attrs.getValue("type"); } */ /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { this.text.append(text); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("type"))) type = sty.getStringValue(); } public boolean updateTime(double curTime) throws SVGException { //Style sheet doesn't change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/0000755000175000017500000000000011562044255024434 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/MainFrame.java0000644000175000017500000001001510627134103027124 0ustar moonmoon/* * MainFrame.java * * Created on September 6, 2004, 1:19 AM */ package com.kitfox.svg.app; /** * * @author kitfox */ public class MainFrame extends javax.swing.JFrame { public static final long serialVersionUID = 1; /** Creates new form MainFrame */ public MainFrame() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents()//GEN-BEGIN:initComponents { jPanel1 = new javax.swing.JPanel(); bn_svgViewer = new javax.swing.JButton(); bn_svgViewer1 = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); bn_quit = new javax.swing.JButton(); setTitle("SVG Salamander - Application Launcher"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS)); bn_svgViewer.setText("SVG Viewer (No animation)"); bn_svgViewer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_svgViewerActionPerformed(evt); } }); jPanel1.add(bn_svgViewer); bn_svgViewer1.setText("SVG Player (Animation)"); bn_svgViewer1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_svgViewer1ActionPerformed(evt); } }); jPanel1.add(bn_svgViewer1); getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); bn_quit.setText("Quit"); bn_quit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_quitActionPerformed(evt); } }); jPanel2.add(bn_quit); getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH); pack(); }//GEN-END:initComponents private void bn_svgViewer1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_svgViewer1ActionPerformed {//GEN-HEADEREND:event_bn_svgViewer1ActionPerformed SVGPlayer.main(null); close(); }//GEN-LAST:event_bn_svgViewer1ActionPerformed private void bn_svgViewerActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_svgViewerActionPerformed {//GEN-HEADEREND:event_bn_svgViewerActionPerformed SVGViewer.main(null); close(); }//GEN-LAST:event_bn_svgViewerActionPerformed private void bn_quitActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_quitActionPerformed {//GEN-HEADEREND:event_bn_quitActionPerformed exitForm(null); }//GEN-LAST:event_bn_quitActionPerformed /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt)//GEN-FIRST:event_exitForm { System.exit(0); }//GEN-LAST:event_exitForm private void close() { this.setVisible(false); this.dispose(); } /** * @param args the command line arguments */ public static void main(String args[]) { new MainFrame().setVisible(true); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bn_quit; private javax.swing.JButton bn_svgViewer; private javax.swing.JButton bn_svgViewer1; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/MainFrame.form0000644000175000017500000000603310627134103027153 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/SVGViewer.java0000644000175000017500000003453511345751075027136 0ustar moonmoon/* * SVGViewer.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 3, 2004, 5:28 PM */ package com.kitfox.svg.app; import com.kitfox.svg.SVGCache; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGDisplayPanel; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGUniverse; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Point; import java.io.File; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.net.URLEncoder; import java.security.AccessControlException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JFileChooser; import javax.swing.JOptionPane; /** * @author Mark McKay * @author Mark McKay */ public class SVGViewer extends javax.swing.JFrame { public static final long serialVersionUID = 1; SVGDisplayPanel svgDisplayPanel = new SVGDisplayPanel(); /** FileChooser for running in trusted environments */ final JFileChooser fileChooser; { // fileChooser = new JFileChooser(new File(".")); JFileChooser fc = null; try { fc = new JFileChooser(); fc.setFileFilter( new javax.swing.filechooser.FileFilter() { final Matcher matchLevelFile = Pattern.compile(".*\\.svg[z]?").matcher(""); public boolean accept(File file) { if (file.isDirectory()) return true; matchLevelFile.reset(file.getName()); return matchLevelFile.matches(); } public String getDescription() { return "SVG file (*.svg, *.svgz)"; } } ); } catch (AccessControlException ex) { //Do not create file chooser if webstart refuses permissions } fileChooser = fc; } /** Backup file service for opening files in WebStart situations */ /* final FileOpenService fileOpenService; { try { fileOpenService = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService"); } catch (UnavailableServiceException e) { fileOpenService = null; } } */ /** Creates new form SVGViewer */ public SVGViewer() { initComponents(); setSize(800, 600); svgDisplayPanel.setBgColor(Color.white); svgDisplayPanel.setPreferredSize(getSize()); panel_svgArea.add(svgDisplayPanel, BorderLayout.CENTER); // scrollPane_svgArea.setViewportView(svgDisplayPanel); } private void loadURL(URL url) { boolean verbose = cmCheck_verbose.isSelected(); // SVGUniverse universe = new SVGUniverse(); SVGUniverse universe = SVGCache.getSVGUniverse(); SVGDiagram diagram = null; URI uri; if (!CheckBoxMenuItem_anonInputStream.isSelected()) { //Load from a disk with a valid URL uri = universe.loadSVG(url); if (verbose) System.err.println("Loading document " + uri.toString()); diagram = universe.getDiagram(uri); } else { //Load from a stream with no particular valid URL try { InputStream is = url.openStream(); uri = universe.loadSVG(is, "defaultName"); if (verbose) System.err.println("Loading document " + uri.toString()); } catch (Exception e) { e.printStackTrace(); return; } } /* ByteArrayOutputStream bs = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bs); os.writeObject(universe); os.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bs.toByteArray()); ObjectInputStream is = new ObjectInputStream(bin); universe = (SVGUniverse)is.readObject(); is.close(); */ diagram = universe.getDiagram(uri); svgDisplayPanel.setDiagram(diagram); repaint(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { scrollPane_svgArea = new javax.swing.JScrollPane(); panel_svgArea = new javax.swing.JPanel(); jMenuBar1 = new javax.swing.JMenuBar(); menu_file = new javax.swing.JMenu(); cm_loadFile = new javax.swing.JMenuItem(); cm_loadUrl = new javax.swing.JMenuItem(); menu_window = new javax.swing.JMenu(); cm_800x600 = new javax.swing.JMenuItem(); CheckBoxMenuItem_anonInputStream = new javax.swing.JCheckBoxMenuItem(); cmCheck_verbose = new javax.swing.JCheckBoxMenuItem(); menu_help = new javax.swing.JMenu(); cm_about = new javax.swing.JMenuItem(); setTitle("SVG Viewer - Salamander Project"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); panel_svgArea.setLayout(new java.awt.BorderLayout()); panel_svgArea.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { panel_svgAreaMousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { panel_svgAreaMouseReleased(evt); } }); scrollPane_svgArea.setViewportView(panel_svgArea); getContentPane().add(scrollPane_svgArea, java.awt.BorderLayout.CENTER); menu_file.setMnemonic('f'); menu_file.setText("File"); cm_loadFile.setMnemonic('l'); cm_loadFile.setText("Load File..."); cm_loadFile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_loadFileActionPerformed(evt); } }); menu_file.add(cm_loadFile); cm_loadUrl.setText("Load URL..."); cm_loadUrl.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_loadUrlActionPerformed(evt); } }); menu_file.add(cm_loadUrl); jMenuBar1.add(menu_file); menu_window.setText("Window"); cm_800x600.setText("800 x 600"); cm_800x600.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_800x600ActionPerformed(evt); } }); menu_window.add(cm_800x600); CheckBoxMenuItem_anonInputStream.setText("Anonymous Input Stream"); menu_window.add(CheckBoxMenuItem_anonInputStream); cmCheck_verbose.setText("Verbose"); cmCheck_verbose.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmCheck_verboseActionPerformed(evt); } }); menu_window.add(cmCheck_verbose); jMenuBar1.add(menu_window); menu_help.setText("Help"); cm_about.setText("About..."); cm_about.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_aboutActionPerformed(evt); } }); menu_help.add(cm_about); jMenuBar1.add(menu_help); setJMenuBar(jMenuBar1); pack(); }// //GEN-END:initComponents private void cm_loadUrlActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadUrlActionPerformed {//GEN-HEADEREND:event_cm_loadUrlActionPerformed String urlStrn = JOptionPane.showInputDialog(this, "Enter URL of SVG file"); if (urlStrn == null) return; try { URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8")); loadURL(url); } catch (Exception e) { e.printStackTrace(); } }//GEN-LAST:event_cm_loadUrlActionPerformed private void panel_svgAreaMouseReleased(java.awt.event.MouseEvent evt)//GEN-FIRST:event_panel_svgAreaMouseReleased {//GEN-HEADEREND:event_panel_svgAreaMouseReleased SVGDiagram diagram = svgDisplayPanel.getDiagram(); List pickedElements; try { pickedElements = diagram.pick(new Point(evt.getX(), evt.getY()), null); } catch (SVGException ex) { ex.printStackTrace(); return; } System.out.println("Pick results:"); for (Iterator it = pickedElements.iterator(); it.hasNext();) { ArrayList path = (ArrayList)it.next(); System.out.print(" Path: "); for (Iterator it2 = path.iterator(); it2.hasNext();) { SVGElement ele = (SVGElement)it2.next(); System.out.print("" + ele.getId() + "(" + ele.getClass().getName() + ") "); } System.out.println(); } }//GEN-LAST:event_panel_svgAreaMouseReleased private void panel_svgAreaMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_panel_svgAreaMousePressed {//GEN-HEADEREND:event_panel_svgAreaMousePressed }//GEN-LAST:event_panel_svgAreaMousePressed private void cmCheck_verboseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmCheck_verboseActionPerformed {//GEN-HEADEREND:event_cmCheck_verboseActionPerformed SVGCache.getSVGUniverse().setVerbose(cmCheck_verbose.isSelected()); }//GEN-LAST:event_cmCheck_verboseActionPerformed private void cm_aboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_aboutActionPerformed {//GEN-HEADEREND:event_cm_aboutActionPerformed //JOptionPane.showMessageDialog(this, "Salamander SVG - Created by Mark McKay\nhttp://www.kitfox.com"); VersionDialog dlg = new VersionDialog(this, true, cmCheck_verbose.isSelected()); dlg.setVisible(true); }//GEN-LAST:event_cm_aboutActionPerformed private void cm_800x600ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cm_800x600ActionPerformed setSize(800, 600); }//GEN-LAST:event_cm_800x600ActionPerformed private void cm_loadFileActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadFileActionPerformed {//GEN-HEADEREND:event_cm_loadFileActionPerformed try { int retVal = fileChooser.showOpenDialog(this); if (retVal == JFileChooser.APPROVE_OPTION) { File chosenFile = fileChooser.getSelectedFile(); URL url = chosenFile.toURI().toURL(); loadURL(url); } } /* catch (IOException ioe) { try { //We may be in a WebStart app. Try again with a FileOpenService FileContents fc = fileOpenService.openFileDialog(null, new String[]{"svg"}); InputStream is = fc.getInputStream(); String name = fc.getName(); } catch (Exception e) { e.printStackTrace(); } } */ catch (Exception e) { e.printStackTrace(); } }//GEN-LAST:event_cm_loadFileActionPerformed /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm // setVisible(false); // dispose(); System.exit(0); }//GEN-LAST:event_exitForm /** * @param args the command line arguments */ public static void main(String args[]) { new SVGViewer().setVisible(true); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBoxMenuItem CheckBoxMenuItem_anonInputStream; private javax.swing.JCheckBoxMenuItem cmCheck_verbose; private javax.swing.JMenuItem cm_800x600; private javax.swing.JMenuItem cm_about; private javax.swing.JMenuItem cm_loadFile; private javax.swing.JMenuItem cm_loadUrl; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenu menu_file; private javax.swing.JMenu menu_help; private javax.swing.JMenu menu_window; private javax.swing.JPanel panel_svgArea; private javax.swing.JScrollPane scrollPane_svgArea; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/ant/0000755000175000017500000000000011562044255025216 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/ant/SVGToImageAntTask.java0000644000175000017500000001710111345751075031260 0ustar moonmoon/* * IndexLoadObjectsAntTask.java * * Created on January 22, 2005, 10:30 AM */ package com.kitfox.svg.app.ant; import java.awt.*; import java.awt.image.*; import java.util.*; import java.util.regex.*; import java.io.*; import javax.imageio.*; //import com.kitfox.util.*; //import com.kitfox.util.indexedObject.*; import org.apache.tools.ant.*; import org.apache.tools.ant.types.*; import com.kitfox.svg.app.beans.*; import com.kitfox.svg.*; import com.kitfox.svg.xml.ColorTable; /** *

Translates a group of SVG files into images.

* *

Parameters:

*

    *
  • destDir - If present, specifices a directory to write SVG files to. Otherwise * writes images to directory SVG file was found in * verbose - If true, prints processing information to the console *
  • format - File format for output images. The java core javax.imageio.ImageIO * class is used for creating images, so format strings will depend on what * files your system is configured to handle. By default, "gif", "jpg" and "png" * files are guaranteed to be present. If omitted, "png" is used by default. *
  • backgroundColor - Optional background color. Color can be specified as a standard * HTML color. That is, as the name of a standard color such as "blue" or * "limegreen", using the # notaion as in #ff00ff for magenta, or in rgb format * listing the components as in rgb(255, 192, 192) for pink. If omitted, * background is transparent. *
  • antiAlias - If set, shapes are drawn using antialiasing. Defaults to true. *
  • interpolation - String describing image interpolation alrogithm. Can * be one of "nearest neighbor", "bilinear" or "bicubic". Defaults to "bicubic". *
  • width - If greater than 0, determines the width of the written image. Otherwise, * the width is obtained from the SVG document. Defaults to -1; *
  • height - If greater than 0, determines the height of the written image. Otherwise, * the height is obtained from the SVG document. Defaults to -1. *
  • sizeToFit - If true and the width and height of the output image differ * from that of the SVG image, the valid area of the SVG image will be resized * to fit the specified size. *
  • verbose - IF true, prints out diagnostic infromation about processing. * Defaults to false. *

* * Example: * <SVGToImage destDir="${index.java}" format="jpg" verbose="true"> * <fileset dir="${dir1}"> * <include name="*.svg"/> * </fileset> * <fileset dir="${dir2}"> * <include name="*.svg"/> * </fileset> * </SVGToImage> * * * * @author kitfox */ public class SVGToImageAntTask extends Task { private ArrayList filesets = new ArrayList(); boolean verbose = false; File destDir; private String format = "png"; Color backgroundColor = null; int width = -1; int height = -1; boolean antiAlias = true; String interpolation = "bicubic"; boolean clipToViewBox = false; boolean sizeToFit = true; /** Creates a new instance of IndexLoadObjectsAntTask */ public SVGToImageAntTask() { } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public void setBackgroundColor(String bgColor) { this.backgroundColor = ColorTable.parseColor(bgColor); } public void setHeight(int height) { this.height = height; } public void setWidth(int width) { this.width = width; } public void setAntiAlias(boolean antiAlias) { this.antiAlias = antiAlias; } public void setInterpolation(String interpolation) { this.interpolation = interpolation; } public void setSizeToFit(boolean sizeToFit) { this.sizeToFit = sizeToFit; } public void setClipToViewBox(boolean clipToViewBox) { this.clipToViewBox = clipToViewBox; } public void setVerbose(boolean verbose) { this.verbose = verbose; } public void setDestDir(File destDir) { this.destDir = destDir; } /** * Adds a set of files. */ public void addFileset(FileSet set) { filesets.add(set); } public void execute() { if (verbose) log("Building SVG images"); for (Iterator it = filesets.iterator(); it.hasNext();) { FileSet fs = (FileSet)it.next(); FileScanner scanner = fs.getDirectoryScanner(getProject()); String[] files = scanner.getIncludedFiles(); try { File basedir = scanner.getBasedir(); if (verbose) log("Scaning " + basedir); for (int i = 0; i < files.length; i++) { //System.out.println("File " + files[i]); //System.out.println("BaseDir " + basedir); translate(basedir, files[i]); } } catch (Exception e) { throw new BuildException(e); } } } private void translate(File baseDir, String shortName) throws BuildException { File source = new File(baseDir, shortName); if (verbose) log("Reading file: " + source); Matcher matchName = Pattern.compile("(.*)\\.svg", Pattern.CASE_INSENSITIVE).matcher(shortName); if (matchName.matches()) { shortName = matchName.group(1); } shortName += "." + format; SVGIcon icon = new SVGIcon(); icon.setSvgURI(source.toURI()); icon.setAntiAlias(antiAlias); if (interpolation.equals("nearest neighbor")) { icon.setInterpolation(SVGIcon.INTERP_NEAREST_NEIGHBOR); } else if (interpolation.equals("bilinear")) { icon.setInterpolation(SVGIcon.INTERP_BILINEAR); } else if (interpolation.equals("bicubic")) { icon.setInterpolation(SVGIcon.INTERP_BICUBIC); } int iconWidth = width > 0 ? width : icon.getIconWidth(); int iconHeight = height > 0 ? height : icon.getIconHeight(); icon.setClipToViewbox(clipToViewBox); icon.setPreferredSize(new Dimension(iconWidth, iconHeight)); icon.setScaleToFit(sizeToFit); BufferedImage image = new BufferedImage(iconWidth, iconHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); if (backgroundColor != null) { g.setColor(backgroundColor); g.fillRect(0, 0, iconWidth, iconHeight); } g.setClip(0, 0, iconWidth, iconHeight); // g.fillRect(10, 10, 100, 100); icon.paintIcon(null, g, 0, 0); g.dispose(); File outFile = destDir == null ? new File(baseDir, shortName) : new File(destDir, shortName); if (verbose) log("Writing file: " + outFile); try { ImageIO.write(image, format, outFile); } catch (IOException e) { log("Error writing image: " + e.getMessage()); throw new BuildException(e); } SVGCache.getSVGUniverse().clear(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/SVGViewer.form0000644000175000017500000001372210627134103027140 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/PlayerThread.java0000644000175000017500000000706110627134103027660 0ustar moonmoon/* * PlayerThread.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 28, 2004, 10:07 PM */ package com.kitfox.svg.app; import java.util.*; /** * * @author kitfox */ public class PlayerThread implements Runnable { HashSet listeners = new HashSet(); double curTime = 0; double timeStep = .2; public static final int PS_STOP = 0; public static final int PS_PLAY_FWD = 1; public static final int PS_PLAY_BACK = 2; int playState = PS_STOP; Thread thread; /** Creates a new instance of PlayerThread */ public PlayerThread() { thread = new Thread(this); thread.start(); } public void run() { while (thread != null) { synchronized (this) { switch (playState) { case PS_PLAY_FWD: curTime += timeStep; break; case PS_PLAY_BACK: curTime -= timeStep; if (curTime < 0) curTime = 0; break; default: case PS_STOP: break; } fireTimeUpdateEvent(); } try { Thread.sleep((long)(timeStep * 1000)); } catch (Exception e) { throw new RuntimeException(e); } } } public void exit() { thread = null; } public synchronized void addListener(PlayerThreadListener listener) { listeners.add(listener); } public synchronized double getCurTime() { return curTime; } public synchronized void setCurTime(double time) { curTime = time; } public synchronized double getTimeStep() { return timeStep; } public synchronized void setTimeStep(double time) { timeStep = time; if (timeStep < .01) timeStep = .01; } public synchronized int getPlayState() { return playState; } public synchronized void setPlayState(int playState) { this.playState = playState; } private void fireTimeUpdateEvent() { for (Iterator it = listeners.iterator(); it.hasNext();) { PlayerThreadListener listener = (PlayerThreadListener)it.next(); listener.updateTime(curTime, timeStep, playState); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/VersionDialog.java0000644000175000017500000001146310627134103030042 0ustar moonmoon/* * VersionDialog.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 13, 2005, 7:23 AM */ package com.kitfox.svg.app; import java.net.*; import java.io.*; import java.util.*; import javax.swing.event.*; import javax.swing.*; import javax.swing.text.html.*; /** * * @author kitfox */ public class VersionDialog extends javax.swing.JDialog { public static final long serialVersionUID = 1; final boolean verbose; /** Creates new form VersionDialog */ public VersionDialog(java.awt.Frame parent, boolean modal, boolean verbose) { super(parent, modal); initComponents(); this.verbose = verbose; textpane_text.setContentType("text/html"); StringBuffer sb = new StringBuffer(); try { URL url = getClass().getResource("/res/help/about/about.html"); if (verbose) { System.err.println("" + getClass() + " trying to load about html " + url); } BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); while (true) { String line = reader.readLine(); if (line == null) break; sb.append(line); } textpane_text.setText(sb.toString()); } catch (Exception e) { e.printStackTrace(); } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); textpane_text = new javax.swing.JTextPane(); jPanel2 = new javax.swing.JPanel(); bn_close = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("About SVG Salamander"); jPanel1.setLayout(new java.awt.BorderLayout()); textpane_text.setEditable(false); textpane_text.setPreferredSize(new java.awt.Dimension(400, 300)); jPanel1.add(textpane_text, java.awt.BorderLayout.CENTER); getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); bn_close.setText("Close"); bn_close.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_closeActionPerformed(evt); } }); jPanel2.add(bn_close); getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH); pack(); } // //GEN-END:initComponents private void bn_closeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_closeActionPerformed {//GEN-HEADEREND:event_bn_closeActionPerformed setVisible(false); dispose(); }//GEN-LAST:event_bn_closeActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new VersionDialog(new javax.swing.JFrame(), true, true).setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bn_close; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JTextPane textpane_text; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/VersionDialog.form0000644000175000017500000000614410627134103030064 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/0000755000175000017500000000000011562044255025524 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/SVGPanel.java0000644000175000017500000001441410627134103030003 0ustar moonmoon/* * SVGIcon.java * * Created on April 21, 2005, 10:43 AM */ package com.kitfox.svg.app.beans; import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.beans.*; import com.kitfox.svg.*; /** * * @author kitfox */ public class SVGPanel extends JPanel { public static final long serialVersionUID = 1; SVGUniverse svgUniverse = SVGCache.getSVGUniverse(); private boolean antiAlias; // private String svgPath; URI svgURI; private boolean scaleToFit; AffineTransform scaleXform = new AffineTransform(); /** Creates new form SVGIcon */ public SVGPanel() { initComponents(); } public int getSVGHeight() { if (scaleToFit) return getPreferredSize().height; SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return 0; return (int)diagram.getHeight(); } public int getSVGWidth() { if (scaleToFit) return getPreferredSize().width; SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return 0; return (int)diagram.getWidth(); } // Draw the icon at the specified location. public void paintComponent(Graphics gg) { super.paintComponent(gg); Graphics2D g = (Graphics2D)gg; Object oldAliasHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF); SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return; if (!scaleToFit) { try { diagram.render(g); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint); } catch (SVGException e) { throw new RuntimeException(e); } return; } Dimension dim = getSize(); final int width = dim.width; final int height = dim.height; // int width = getWidth(); // int height = getHeight(); // if (width == 0 || height == 0) // { // //Chances are we're rendering offscreen // Dimension dim = getSize(); // width = dim.width; // height = dim.height; // return; // } // g.setClip(0, 0, dim.width, dim.height); final Rectangle2D.Double rect = new Rectangle2D.Double(); diagram.getViewRect(rect); scaleXform.setToScale(width / rect.width, height / rect.height); AffineTransform oldXform = g.getTransform(); g.transform(scaleXform); try { diagram.render(g); } catch (SVGException e) { throw new RuntimeException(e); } g.setTransform(oldXform); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint); } public SVGUniverse getSvgUniverse() { return svgUniverse; } public void setSvgUniverse(SVGUniverse svgUniverse) { SVGUniverse old = this.svgUniverse; this.svgUniverse = svgUniverse; firePropertyChange("svgUniverse", old, svgUniverse); } public URI getSvgURI() { return svgURI; } public void setSvgURI(URI svgURI) { URI old = this.svgURI; this.svgURI = svgURI; firePropertyChange("svgURI", old, svgURI); } /** * Most resources your component will want to access will be resources on your classpath. * This method will interpret the passed string as a path in the classpath and use * Class.getResource() to determine the URI of the SVG. */ public void setSvgResourcePath(String resourcePath) throws SVGException { URI old = this.svgURI; try { svgURI = new URI(getClass().getResource(resourcePath).toString()); //System.err.println("SVGPanel: new URI " + svgURI + " from path " + resourcePath); firePropertyChange("svgURI", old, svgURI); repaint(); } catch (Exception e) { throw new SVGException("Could not resolve path " + resourcePath, e); // svgURI = old; } } public boolean isScaleToFit() { return scaleToFit; } public void setScaleToFit(boolean scaleToFit) { boolean old = this.scaleToFit; this.scaleToFit = scaleToFit; firePropertyChange("scaleToFit", old, scaleToFit); } /** * @return true if antiAliasing is turned on. * @deprecated */ public boolean getUseAntiAlias() { return getAntiAlias(); } /** * @param antiAlias true to use antiAliasing. * @deprecated */ public void setUseAntiAlias(boolean antiAlias) { setAntiAlias(antiAlias); } /** * @return true if antiAliasing is turned on. */ public boolean getAntiAlias() { return antiAlias; } /** * @param antiAlias true to use antiAliasing. */ public void setAntiAlias(boolean antiAlias) { boolean old = this.antiAlias; this.antiAlias = antiAlias; firePropertyChange("antiAlias", old, antiAlias); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); } // //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/SVGPanel.form0000644000175000017500000000157310627134103030027 0ustar moonmoon
././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/ProportionalLayoutPanel.javasvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/ProportionalLayoutPanel.j0000644000175000017500000000525510627134103032545 0ustar moonmoon/* * ProportionalLayoutPanel.java * * Created on May 7, 2005, 4:15 AM */ package com.kitfox.svg.app.beans; import java.awt.*; import java.util.*; import javax.swing.*; /** * Panel based on the null layout. Allows editing with absolute layout. When * instanced, records layout dimensions of all subcomponents. Then, if the * panel is ever resized, scales all children to fit new size. * * @author kitfox */ public class ProportionalLayoutPanel extends javax.swing.JPanel { public static final long serialVersionUID = 1; //Margins to leave on sides of panel, expressed in fractions [0 1] float topMargin; float bottomMargin; float leftMargin; float rightMargin; /** Creates new form ProportionalLayoutPanel */ public ProportionalLayoutPanel() { initComponents(); } public void addNotify() { super.addNotify(); Rectangle rect = this.getBounds(); JOptionPane.showMessageDialog(this, "" + rect); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); setLayout(null); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { formComponentResized(evt); } public void componentShown(java.awt.event.ComponentEvent evt) { formComponentShown(evt); } }); add(jPanel1); jPanel1.setBounds(80, 90, 280, 160); } // //GEN-END:initComponents private void formComponentShown(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentShown {//GEN-HEADEREND:event_formComponentShown JOptionPane.showMessageDialog(this, "" + getWidth() + ", " + getHeight()); }//GEN-LAST:event_formComponentShown private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized {//GEN-HEADEREND:event_formComponentResized // TODO add your handling code here: }//GEN-LAST:event_formComponentResized // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel jPanel1; // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/ProportionalLayoutPanel.formsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/ProportionalLayoutPanel.f0000644000175000017500000000307010627134103032532 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/beans/SVGIcon.java0000644000175000017500000002571710627134103027644 0ustar moonmoon/* * SVGIcon.java * * Created on April 21, 2005, 10:45 AM */ package com.kitfox.svg.app.beans; import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.beans.*; import com.kitfox.svg.*; /** * * @author kitfox */ public class SVGIcon implements Icon { public static final long serialVersionUID = 1; private PropertyChangeSupport changes = new PropertyChangeSupport(this); SVGUniverse svgUniverse = SVGCache.getSVGUniverse(); public static final int INTERP_NEAREST_NEIGHBOR = 0; public static final int INTERP_BILINEAR = 1; public static final int INTERP_BICUBIC = 2; private boolean antiAlias; private int interpolation = INTERP_NEAREST_NEIGHBOR; private boolean clipToViewbox; // private String svgPath; URI svgURI; private boolean scaleToFit; AffineTransform scaleXform = new AffineTransform(); // Dimension preferredSize = new Dimension(100, 100); Dimension preferredSize; /** Creates a new instance of SVGIcon */ public SVGIcon() { } public void addPropertyChangeListener(PropertyChangeListener p) { changes.addPropertyChangeListener(p); } public void removePropertyChangeListener(PropertyChangeListener p) { changes.removePropertyChangeListener(p); } /** * @return height of this icon */ public int getIconHeight() { if (scaleToFit && preferredSize != null) { return preferredSize.height; } SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return 0; return (int)diagram.getHeight(); } /** * @return width of this icon */ public int getIconWidth() { if (scaleToFit && preferredSize != null) { return preferredSize.width; } SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return 0; return (int)diagram.getWidth(); } /** * Draws the icon to the specified component. * @param comp - Component to draw icon to. This is ignored by SVGIcon, and can be set to null; only gg is used for drawing the icon * @param gg - Graphics context to render SVG content to * @param x - X coordinate to draw icon * @param y - Y coordinate to draw icon */ public void paintIcon(Component comp, Graphics gg, int x, int y) { Graphics2D g = (Graphics2D)gg; Object oldAliasHint = g.getRenderingHint(RenderingHints.KEY_ANTIALIASING); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF); Object oldInterpolationHint = g.getRenderingHint(RenderingHints.KEY_INTERPOLATION); switch (interpolation) { case INTERP_NEAREST_NEIGHBOR: g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); break; case INTERP_BILINEAR: g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); break; case INTERP_BICUBIC: g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); break; } SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram == null) return; g.translate(x, y); diagram.setIgnoringClipHeuristic(!clipToViewbox); if (clipToViewbox) { g.setClip(new Rectangle2D.Float(0, 0, diagram.getWidth(), diagram.getHeight())); } if (!scaleToFit) { try { diagram.render(g); g.translate(-x, -y); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint); } catch (Exception e) { throw new RuntimeException(e); } return; } final int width = getIconWidth(); final int height = getIconHeight(); // int width = getWidth(); // int height = getHeight(); if (width == 0 || height == 0) { return; } // if (width == 0 || height == 0) // { // //Chances are we're rendering offscreen // Dimension dim = getSize(); // width = dim.width; // height = dim.height; // return; // } // g.setClip(0, 0, width, height); final Rectangle2D.Double rect = new Rectangle2D.Double(); diagram.getViewRect(rect); scaleXform.setToScale(width / rect.width, height / rect.height); AffineTransform oldXform = g.getTransform(); g.transform(scaleXform); try { diagram.render(g); } catch (SVGException e) { throw new RuntimeException(e); } g.setTransform(oldXform); g.translate(-x, -y); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAliasHint); if (oldInterpolationHint != null) g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, oldInterpolationHint); } /** * @return the universe this icon draws it's SVGDiagrams from */ public SVGUniverse getSvgUniverse() { return svgUniverse; } public void setSvgUniverse(SVGUniverse svgUniverse) { SVGUniverse old = this.svgUniverse; this.svgUniverse = svgUniverse; changes.firePropertyChange("svgUniverse", old, svgUniverse); } /** * @return the uni of the document being displayed by this icon */ public URI getSvgURI() { return svgURI; } /** * Loads an SVG document from a URI. * @param svgURI - URI to load document from */ public void setSvgURI(URI svgURI) { URI old = this.svgURI; this.svgURI = svgURI; SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram != null) { Dimension size = getPreferredSize(); if (size == null) { size = new Dimension((int)diagram.getRoot().getDeviceWidth(), (int)diagram.getRoot().getDeviceHeight()); } diagram.setDeviceViewport(new Rectangle(0, 0, size.width, size.height)); } changes.firePropertyChange("svgURI", old, svgURI); } /** * Loads an SVG document from the classpath. This function is equivilant to * setSvgURI(new URI(getClass().getResource(resourcePath).toString()); * @param resourcePath - resource to load */ public void setSvgResourcePath(String resourcePath) { URI old = this.svgURI; try { svgURI = new URI(getClass().getResource(resourcePath).toString()); changes.firePropertyChange("svgURI", old, svgURI); SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram != null) { diagram.setDeviceViewport(new Rectangle(0, 0, preferredSize.width, preferredSize.height)); } } catch (Exception e) { svgURI = old; } } /** * If this SVG document has a viewbox, if scaleToFit is set, will scale the viewbox to match the * preferred size of this icon */ public boolean isScaleToFit() { return scaleToFit; } public void setScaleToFit(boolean scaleToFit) { boolean old = this.scaleToFit; this.scaleToFit = scaleToFit; changes.firePropertyChange("scaleToFit", old, scaleToFit); } public Dimension getPreferredSize() { if (preferredSize == null) { SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram != null) { //preferredSize = new Dimension((int)diagram.getWidth(), (int)diagram.getHeight()); setPreferredSize(new Dimension((int)diagram.getWidth(), (int)diagram.getHeight())); } } return new Dimension(preferredSize); } public void setPreferredSize(Dimension preferredSize) { Dimension old = this.preferredSize; this.preferredSize = preferredSize; SVGDiagram diagram = svgUniverse.getDiagram(svgURI); if (diagram != null) { diagram.setDeviceViewport(new Rectangle(0, 0, preferredSize.width, preferredSize.height)); } changes.firePropertyChange("preferredSize", old, preferredSize); } /** * @return true if antiAliasing is turned on. * @deprecated */ public boolean getUseAntiAlias() { return getAntiAlias(); } /** * @param antiAlias true to use antiAliasing. * @deprecated */ public void setUseAntiAlias(boolean antiAlias) { setAntiAlias(antiAlias); } /** * @return true if antiAliasing is turned on. */ public boolean getAntiAlias() { return antiAlias; } /** * @param antiAlias true to use antiAliasing. */ public void setAntiAlias(boolean antiAlias) { boolean old = this.antiAlias; this.antiAlias = antiAlias; changes.firePropertyChange("antiAlias", old, antiAlias); } /** * @return interpolation used in rescaling images */ public int getInterpolation() { return interpolation; } /** * @param interpolation Interpolation value used in rescaling images. * Should be one of * INTERP_NEAREST_NEIGHBOR - Fastest, one pixel resampling, poor quality * INTERP_BILINEAR - four pixel resampling * INTERP_BICUBIC - Slowest, nine pixel resampling, best quality */ public void setInterpolation(int interpolation) { int old = this.interpolation; this.interpolation = interpolation; changes.firePropertyChange("interpolation", old, interpolation); } /** * clipToViewbox will set a clip box equivilant to the SVG's viewbox before * rendering. */ public boolean isClipToViewbox() { return clipToViewbox; } public void setClipToViewbox(boolean clipToViewbox) { this.clipToViewbox = clipToViewbox; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/data/0000755000175000017500000000000011562044255025345 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/data/HandlerFactory.java0000644000175000017500000000103211427227157031115 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg.app.data; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; /** * * @author kitfox */ public class HandlerFactory implements URLStreamHandlerFactory { static Handler handler = new Handler(); public URLStreamHandler createURLStreamHandler(String protocol) { if ("data".equals(protocol)) { return handler; } return null; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/data/Handler.java0000644000175000017500000000335611427227157027600 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg.app.data; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; /** * * @author kitfox */ public class Handler extends URLStreamHandler { class Connection extends URLConnection { String mime; byte[] buf; public Connection(URL url) { super(url); String path = url.getPath(); int idx = path.indexOf(';'); mime = path.substring(0, idx); String content = path.substring(idx + 1); if (content.startsWith("base64,")) { content = content.substring(7); try { buf = new sun.misc.BASE64Decoder().decodeBuffer(content); } catch (IOException ex) { ex.printStackTrace(); } } } public void connect() throws IOException { } public String getHeaderField(String name) { if ("content-type".equals(name)) { return mime; } return super.getHeaderField(name); } public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(buf); } // public Object getContent() throws IOException // { // BufferedImage img = ImageIO.read(getInputStream()); // } } protected URLConnection openConnection(URL u) throws IOException { return new Connection(u); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/PlayerThreadListener.java0000644000175000017500000000237610627134103031372 0ustar moonmoon/* * PlayerThreadListener.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 28, 2004, 10:15 PM */ package com.kitfox.svg.app; /** * * @author kitfox */ public interface PlayerThreadListener { public void updateTime(double curTime, double timeStep, int playState); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/PlayerDialog.java0000644000175000017500000002435110627134103027651 0ustar moonmoon/* * PlayerDialog.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 28, 2004, 9:56 PM */ package com.kitfox.svg.app; /** * * @author kitfox */ public class PlayerDialog extends javax.swing.JDialog implements PlayerThreadListener { public static final long serialVersionUID = 1; PlayerThread thread; final SVGPlayer parent; /** Creates new form PlayerDialog */ public PlayerDialog(SVGPlayer parent) { super(parent, false); initComponents(); this.parent = parent; thread = new PlayerThread(); thread.addListener(this); text_timeStepActionPerformed(null); } public void updateTime(double curTime, double timeStep, int playState) { if (playState == PlayerThread.PS_STOP) return; text_curTime.setText("" + (float)curTime); parent.updateTime(curTime); // text_timeStep.setText("" + (int)(1.0 / timeStep)); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); bn_playBack = new javax.swing.JButton(); bn_stop = new javax.swing.JButton(); bn_playFwd = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); text_curTime = new javax.swing.JTextField(); bn_time0 = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); text_timeStep = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Player"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosed(java.awt.event.WindowEvent evt) { formWindowClosed(evt); } }); bn_playBack.setText("<"); bn_playBack.setToolTipText("Play backwards"); bn_playBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_playBackActionPerformed(evt); } }); jPanel1.add(bn_playBack); bn_stop.setText("||"); bn_stop.setToolTipText("Stop playback"); bn_stop.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_stopActionPerformed(evt); } }); jPanel1.add(bn_stop); bn_playFwd.setText(">"); bn_playFwd.setToolTipText("Play Forwards"); bn_playFwd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_playFwdActionPerformed(evt); } }); jPanel1.add(bn_playFwd); getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH); jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS)); jLabel1.setText("Cur Time"); jPanel3.add(jLabel1); text_curTime.setHorizontalAlignment(javax.swing.JTextField.LEFT); text_curTime.setText("0"); text_curTime.setPreferredSize(new java.awt.Dimension(100, 21)); text_curTime.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { text_curTimeActionPerformed(evt); } }); text_curTime.addFocusListener(new java.awt.event.FocusAdapter() { public void focusLost(java.awt.event.FocusEvent evt) { text_curTimeFocusLost(evt); } }); jPanel3.add(text_curTime); bn_time0.setText("Time 0"); bn_time0.setToolTipText("Reset time to first frame"); bn_time0.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bn_time0ActionPerformed(evt); } }); jPanel3.add(bn_time0); jPanel2.add(jPanel3); jLabel2.setText("Frames Per Second"); jPanel4.add(jLabel2); text_timeStep.setHorizontalAlignment(javax.swing.JTextField.RIGHT); text_timeStep.setText("60"); text_timeStep.setPreferredSize(new java.awt.Dimension(100, 21)); text_timeStep.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { text_timeStepActionPerformed(evt); } }); text_timeStep.addFocusListener(new java.awt.event.FocusAdapter() { public void focusLost(java.awt.event.FocusEvent evt) { text_timeStepFocusLost(evt); } }); jPanel4.add(text_timeStep); jPanel2.add(jPanel4); getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER); pack(); }// //GEN-END:initComponents private void bn_time0ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_time0ActionPerformed {//GEN-HEADEREND:event_bn_time0ActionPerformed thread.setCurTime(0); }//GEN-LAST:event_bn_time0ActionPerformed private void bn_playFwdActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_playFwdActionPerformed {//GEN-HEADEREND:event_bn_playFwdActionPerformed thread.setPlayState(PlayerThread.PS_PLAY_FWD); }//GEN-LAST:event_bn_playFwdActionPerformed private void bn_stopActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_stopActionPerformed {//GEN-HEADEREND:event_bn_stopActionPerformed thread.setPlayState(PlayerThread.PS_STOP); }//GEN-LAST:event_bn_stopActionPerformed private void bn_playBackActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_bn_playBackActionPerformed {//GEN-HEADEREND:event_bn_playBackActionPerformed thread.setPlayState(PlayerThread.PS_PLAY_BACK); }//GEN-LAST:event_bn_playBackActionPerformed private void formWindowClosed(java.awt.event.WindowEvent evt)//GEN-FIRST:event_formWindowClosed {//GEN-HEADEREND:event_formWindowClosed // thread.exit(); }//GEN-LAST:event_formWindowClosed private void text_timeStepFocusLost(java.awt.event.FocusEvent evt)//GEN-FIRST:event_text_timeStepFocusLost {//GEN-HEADEREND:event_text_timeStepFocusLost text_timeStepActionPerformed(null); }//GEN-LAST:event_text_timeStepFocusLost private void text_timeStepActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_text_timeStepActionPerformed {//GEN-HEADEREND:event_text_timeStepActionPerformed try { int val = Integer.parseInt(text_timeStep.getText()); thread.setTimeStep(1.0 / val); } catch (Exception e) { } double d = thread.getTimeStep(); String newStrn = "" + (int)(1f / d); if (newStrn.equals(text_timeStep.getText())) return; text_timeStep.setText(newStrn); // text_timeStepActionPerformed(null); }//GEN-LAST:event_text_timeStepActionPerformed private void text_curTimeActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_text_curTimeActionPerformed {//GEN-HEADEREND:event_text_curTimeActionPerformed try { double val = Double.parseDouble(text_curTime.getText()); thread.setCurTime(val); } catch (Exception e) { } double d = thread.getCurTime(); text_curTime.setText("" + (float)d); text_timeStepActionPerformed(null); }//GEN-LAST:event_text_curTimeActionPerformed private void text_curTimeFocusLost(java.awt.event.FocusEvent evt)//GEN-FIRST:event_text_curTimeFocusLost {//GEN-HEADEREND:event_text_curTimeFocusLost text_curTimeActionPerformed(null); }//GEN-LAST:event_text_curTimeFocusLost // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bn_playBack; private javax.swing.JButton bn_playFwd; private javax.swing.JButton bn_stop; private javax.swing.JButton bn_time0; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JTextField text_curTime; private javax.swing.JTextField text_timeStep; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/SVGPlayer.java0000644000175000017500000003422411345751075027124 0ustar moonmoon/* * SVGViewer.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 3, 2004, 5:28 PM */ package com.kitfox.svg.app; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGDisplayPanel; import com.kitfox.svg.SVGElement; import com.kitfox.svg.SVGException; import com.kitfox.svg.SVGUniverse; import java.awt.Color; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.io.File; import java.io.InputStream; import java.net.URI; import java.net.URL; import java.net.URLEncoder; import java.security.AccessControlException; import java.util.ArrayList; import java.util.List; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JFileChooser; import javax.swing.JOptionPane; /** * @author Mark McKay * @author Mark McKay */ public class SVGPlayer extends javax.swing.JFrame { public static final long serialVersionUID = 1; SVGDisplayPanel svgDisplayPanel = new SVGDisplayPanel(); final PlayerDialog playerDialog; SVGUniverse universe; /** FileChooser for running in trusted environments */ final JFileChooser fileChooser; { // fileChooser = new JFileChooser(new File(".")); JFileChooser fc = null; try { fc = new JFileChooser(); fc.setFileFilter( new javax.swing.filechooser.FileFilter() { final Matcher matchLevelFile = Pattern.compile(".*\\.svg[z]?").matcher(""); public boolean accept(File file) { if (file.isDirectory()) return true; matchLevelFile.reset(file.getName()); return matchLevelFile.matches(); } public String getDescription() { return "SVG file (*.svg, *.svgz)"; } } ); } catch (AccessControlException ex) { //Do not create file chooser if webstart refuses permissions } fileChooser = fc; } /** Backup file service for opening files in WebStart situations */ /* final FileOpenService fileOpenService; { try { fileOpenService = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService"); } catch (UnavailableServiceException e) { fileOpenService = null; } } */ /** Creates new form SVGViewer */ public SVGPlayer() { initComponents(); setSize(800, 600); svgDisplayPanel.setBgColor(Color.white); svgDisplayPanel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { SVGDiagram diagram = svgDisplayPanel.getDiagram(); if (diagram == null) return; System.out.println("Picking at cursor (" + evt.getX() + ", " + evt.getY() + ")"); try { List paths = diagram.pick(new Point2D.Float(evt.getX(), evt.getY()), null); for (int i = 0; i < paths.size(); i++) { ArrayList path = (ArrayList)paths.get(i); System.out.println(pathToString(path)); } } catch (SVGException ex) { ex.printStackTrace(); } } } ); svgDisplayPanel.setPreferredSize(getSize()); scrollPane_svgArea.setViewportView(svgDisplayPanel); playerDialog = new PlayerDialog(this); } private String pathToString(List path) { if (path.size() == 0) return ""; StringBuffer sb = new StringBuffer(); sb.append(path.get(0)); for (int i = 1; i < path.size(); i++) { sb.append("/"); sb.append(((SVGElement)path.get(i)).getId()); } return sb.toString(); } public void updateTime(double curTime) { try { if (universe != null) { universe.setCurTime(curTime); universe.updateTime(); // svgDisplayPanel.updateTime(curTime); repaint(); } } catch (Exception e) { e.printStackTrace(); } } private void loadURL(URL url) { boolean verbose = cmCheck_verbose.isSelected(); universe = new SVGUniverse(); universe.setVerbose(verbose); SVGDiagram diagram = null; if (!CheckBoxMenuItem_anonInputStream.isSelected()) { //Load from a disk with a valid URL URI uri = universe.loadSVG(url); if (verbose) System.err.println(uri.toString()); diagram = universe.getDiagram(uri); } else { //Load from a stream with no particular valid URL try { InputStream is = url.openStream(); URI uri = universe.loadSVG(is, "defaultName"); if (verbose) System.err.println(uri.toString()); diagram = universe.getDiagram(uri); } catch (Exception e) { e.printStackTrace(); } } svgDisplayPanel.setDiagram(diagram); repaint(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { scrollPane_svgArea = new javax.swing.JScrollPane(); jMenuBar1 = new javax.swing.JMenuBar(); menu_file = new javax.swing.JMenu(); cm_loadFile = new javax.swing.JMenuItem(); cm_loadUrl = new javax.swing.JMenuItem(); menu_window = new javax.swing.JMenu(); cm_player = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JSeparator(); cm_800x600 = new javax.swing.JMenuItem(); CheckBoxMenuItem_anonInputStream = new javax.swing.JCheckBoxMenuItem(); cmCheck_verbose = new javax.swing.JCheckBoxMenuItem(); menu_help = new javax.swing.JMenu(); cm_about = new javax.swing.JMenuItem(); setTitle("SVG Player - Salamander Project"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); getContentPane().add(scrollPane_svgArea, java.awt.BorderLayout.CENTER); menu_file.setMnemonic('f'); menu_file.setText("File"); cm_loadFile.setMnemonic('l'); cm_loadFile.setText("Load File..."); cm_loadFile.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_loadFileActionPerformed(evt); } }); menu_file.add(cm_loadFile); cm_loadUrl.setText("Load URL..."); cm_loadUrl.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_loadUrlActionPerformed(evt); } }); menu_file.add(cm_loadUrl); jMenuBar1.add(menu_file); menu_window.setText("Window"); cm_player.setText("Player"); cm_player.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_playerActionPerformed(evt); } }); menu_window.add(cm_player); menu_window.add(jSeparator2); cm_800x600.setText("800 x 600"); cm_800x600.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_800x600ActionPerformed(evt); } }); menu_window.add(cm_800x600); CheckBoxMenuItem_anonInputStream.setText("Anonymous Input Stream"); menu_window.add(CheckBoxMenuItem_anonInputStream); cmCheck_verbose.setText("Verbose"); cmCheck_verbose.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmCheck_verboseActionPerformed(evt); } }); menu_window.add(cmCheck_verbose); jMenuBar1.add(menu_window); menu_help.setText("Help"); cm_about.setText("About..."); cm_about.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cm_aboutActionPerformed(evt); } }); menu_help.add(cm_about); jMenuBar1.add(menu_help); setJMenuBar(jMenuBar1); pack(); }// //GEN-END:initComponents private void cm_loadUrlActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadUrlActionPerformed {//GEN-HEADEREND:event_cm_loadUrlActionPerformed String urlStrn = JOptionPane.showInputDialog(this, "Enter URL of SVG file"); if (urlStrn == null) return; try { URL url = new URL(URLEncoder.encode(urlStrn, "UTF-8")); loadURL(url); } catch (Exception e) { e.printStackTrace(); } }//GEN-LAST:event_cm_loadUrlActionPerformed private void cmCheck_verboseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmCheck_verboseActionPerformed {//GEN-HEADEREND:event_cmCheck_verboseActionPerformed // TODO add your handling code here: }//GEN-LAST:event_cmCheck_verboseActionPerformed private void cm_playerActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_playerActionPerformed {//GEN-HEADEREND:event_cm_playerActionPerformed playerDialog.setVisible(true); }//GEN-LAST:event_cm_playerActionPerformed private void cm_aboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_aboutActionPerformed {//GEN-HEADEREND:event_cm_aboutActionPerformed VersionDialog dia = new VersionDialog(this, true, cmCheck_verbose.isSelected()); dia.setVisible(true); // JOptionPane.showMessageDialog(this, "Salamander SVG - Created by Mark McKay\nhttp://www.kitfox.com"); }//GEN-LAST:event_cm_aboutActionPerformed private void cm_800x600ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cm_800x600ActionPerformed setSize(800, 600); }//GEN-LAST:event_cm_800x600ActionPerformed private void cm_loadFileActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadFileActionPerformed {//GEN-HEADEREND:event_cm_loadFileActionPerformed boolean verbose = cmCheck_verbose.isSelected(); try { int retVal = fileChooser.showOpenDialog(this); if (retVal == JFileChooser.APPROVE_OPTION) { File chosenFile = fileChooser.getSelectedFile(); URL url = chosenFile.toURI().toURL(); loadURL(url); } } catch (Exception e) { e.printStackTrace(); } }//GEN-LAST:event_cm_loadFileActionPerformed /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm System.exit(0); }//GEN-LAST:event_exitForm /** * @param args the command line arguments */ public static void main(String args[]) { new SVGPlayer().setVisible(true); } public void updateTime(double curTime, double timeStep, int playState) { } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBoxMenuItem CheckBoxMenuItem_anonInputStream; private javax.swing.JCheckBoxMenuItem cmCheck_verbose; private javax.swing.JMenuItem cm_800x600; private javax.swing.JMenuItem cm_about; private javax.swing.JMenuItem cm_loadFile; private javax.swing.JMenuItem cm_loadUrl; private javax.swing.JMenuItem cm_player; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JSeparator jSeparator2; private javax.swing.JMenu menu_file; private javax.swing.JMenu menu_help; private javax.swing.JMenu menu_window; private javax.swing.JScrollPane scrollPane_svgArea; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/PlayerDialog.form0000644000175000017500000001607710627134103027701 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/app/SVGPlayer.form0000644000175000017500000001364110627134103027133 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Circle.java0000644000175000017500000001130711452231150025710 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; /** * @author Mark McKay * @author Mark McKay */ public class Circle extends ShapeElement { float cx = 0f; float cy = 0f; float r = 0f; Ellipse2D.Float circle = new Ellipse2D.Float(); /** Creates a new instance of Rect */ public Circle() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String cx = attrs.getValue("cx"); String cy = attrs.getValue("cy"); String r = attrs.getValue("r"); this.cx = XMLParseUtil.parseFloat(cx); this.cy = XMLParseUtil.parseFloat(cy); this.r = XMLParseUtil.parseFloat(r); build(); //setBounds(this.cx - this.r, this.cy - this.r, this.r * 2.0, this.r * 2.0); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { // super.loaderEndElement(helper); // build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("cx"))) cx = sty.getFloatValueWithUnits(); if (getPres(sty.setName("cy"))) cy = sty.getFloatValueWithUnits(); if (getPres(sty.setName("r"))) r = sty.getFloatValueWithUnits(); circle.setFrame(cx - r, cy - r, r * 2f, r * 2f); } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, circle); finishLayer(g); } public Shape getShape() { return shapeToParent(circle); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(circle.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("cx"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != cx) { cx = newVal; shapeChange = true; } } if (getPres(sty.setName("cy"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != cy) { cy = newVal; shapeChange = true; } } if (getPres(sty.setName("r"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != r) { r = newVal; shapeChange = true; } } if (shapeChange) { build(); // circle.setFrame(cx - r, cy - r, r * 2f, r * 2f); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGRoot.java0000644000175000017500000003420011452231150026007 0ustar moonmoon/* * SVGRoot.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 5:33 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.NumberWithUnits; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.*; import java.awt.*; /** * The root element of an SVG tree. * * @author Mark McKay * @author Mark McKay */ public class SVGRoot extends Group { NumberWithUnits x; NumberWithUnits y; NumberWithUnits width; NumberWithUnits height; // final Rectangle2D.Float viewBox = new Rectangle2D.Float(); Rectangle2D.Float viewBox = null; public static final int PA_X_NONE = 0; public static final int PA_X_MIN = 1; public static final int PA_X_MID = 2; public static final int PA_X_MAX = 3; public static final int PA_Y_NONE = 0; public static final int PA_Y_MIN = 1; public static final int PA_Y_MID = 2; public static final int PA_Y_MAX = 3; public static final int PS_MEET = 0; public static final int PS_SLICE = 1; int parSpecifier = PS_MEET; int parAlignX = PA_X_MID; int parAlignY = PA_Y_MID; final AffineTransform viewXform = new AffineTransform(); final Rectangle2D.Float clipRect = new Rectangle2D.Float(); /** Creates a new instance of SVGRoot */ public SVGRoot() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); x = XMLParseUtil.parseNumberWithUnits(attrs.getValue("x")); y = XMLParseUtil.parseNumberWithUnits(attrs.getValue("y")); width = XMLParseUtil.parseNumberWithUnits(attrs.getValue("width")); height = XMLParseUtil.parseNumberWithUnits(attrs.getValue("height")); String viewBox = attrs.getValue("viewBox"); float[] coords = XMLParseUtil.parseFloatList(viewBox); if (coords == null) { //this.viewBox.setRect(0, 0, width.getValue(), height.getValue()); this.viewBox = null; } else { this.viewBox = new Rectangle2D.Float(coords[0], coords[1], coords[2], coords[3]); } String par = attrs.getValue("preserveAspectRatio"); if (par != null) { String[] parList = XMLParseUtil.parseStringList(par); if (parList[0].equals("none")) { parAlignX = PA_X_NONE; parAlignY = PA_Y_NONE; } else if (parList[0].equals("xMinYMin")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMidYMin")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMaxYMin")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMinYMid")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMidYMid")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMaxYMid")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMinYMax")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MAX; } else if (parList[0].equals("xMidYMax")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MAX; } else if (parList[0].equals("xMaxYMax")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MAX; } if (parList[1].equals("meet")) parSpecifier = PS_MEET; else if (parList[1].equals("slice")) parSpecifier = PS_SLICE; } build(); } */ public void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x"))) x = sty.getNumberWithUnits(); if (getPres(sty.setName("y"))) y = sty.getNumberWithUnits(); if (getPres(sty.setName("width"))) width = sty.getNumberWithUnits(); if (getPres(sty.setName("height"))) height = sty.getNumberWithUnits(); if (getPres(sty.setName("viewBox"))) { float[] coords = sty.getFloatList(); viewBox = new Rectangle2D.Float(coords[0], coords[1], coords[2], coords[3]); } if (getPres(sty.setName("preserveAspectRatio"))) { String preserve = sty.getStringValue(); if (contains(preserve, "none")) { parAlignX = PA_X_NONE; parAlignY = PA_Y_NONE; } else if (contains(preserve, "xMinYMin")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MIN; } else if (contains(preserve, "xMidYMin")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MIN; } else if (contains(preserve, "xMaxYMin")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MIN; } else if (contains(preserve, "xMinYMid")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MID; } else if (contains(preserve, "xMidYMid")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MID; } else if (contains(preserve, "xMaxYMid")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MID; } else if (contains(preserve, "xMinYMax")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MAX; } else if (contains(preserve, "xMidYMax")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MAX; } else if (contains(preserve, "xMaxYMax")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MAX; } if (contains(preserve, "meet")) parSpecifier = PS_MEET; else if (contains(preserve, "slice")) parSpecifier = PS_SLICE; /* String[] parList = sty.getStringList(); if (parList[0].equals("none")) { parAlignX = PA_X_NONE; parAlignY = PA_Y_NONE; } else if (parList[0].equals("xMinYMin")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMidYMin")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMaxYMin")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MIN; } else if (parList[0].equals("xMinYMid")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMidYMid")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMaxYMid")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MID; } else if (parList[0].equals("xMinYMax")) { parAlignX = PA_X_MIN; parAlignY = PA_Y_MAX; } else if (parList[0].equals("xMidYMax")) { parAlignX = PA_X_MID; parAlignY = PA_Y_MAX; } else if (parList[0].equals("xMaxYMax")) { parAlignX = PA_X_MAX; parAlignY = PA_Y_MAX; } if (parList[1].equals("meet")) parSpecifier = PS_MEET; else if (parList[1].equals("slice")) parSpecifier = PS_SLICE; */ } prepareViewport(); } private boolean contains(String text, String find) { return (text.indexOf(find) != -1); } protected void prepareViewport() { Rectangle deviceViewport = diagram.getDeviceViewport(); Rectangle2D defaultBounds; try { defaultBounds = getBoundingBox(); } catch (SVGException ex) { defaultBounds= new Rectangle2D.Float(); } //Determine destination rectangle float xx, yy, ww, hh; if (width != null) { xx = (x == null) ? 0 : StyleAttribute.convertUnitsToPixels(x.getUnits(), x.getValue()); if (width.getUnits() == NumberWithUnits.UT_PERCENT) { ww = width.getValue() * deviceViewport.width; } else { ww = StyleAttribute.convertUnitsToPixels(width.getUnits(), width.getValue()); } // setAttribute("x", AnimationElement.AT_XML, "" + xx); // setAttribute("width", AnimationElement.AT_XML, "" + ww); } else if (viewBox != null) { xx = (float)viewBox.x; ww = (float)viewBox.width; width = new NumberWithUnits(ww, NumberWithUnits.UT_PX); x = new NumberWithUnits(xx, NumberWithUnits.UT_PX); } else { //Estimate size from scene bounding box xx = (float)defaultBounds.getX(); ww = (float)defaultBounds.getWidth(); width = new NumberWithUnits(ww, NumberWithUnits.UT_PX); x = new NumberWithUnits(xx, NumberWithUnits.UT_PX); } if (height != null) { yy = (y == null) ? 0 : StyleAttribute.convertUnitsToPixels(y.getUnits(), y.getValue()); if (height.getUnits() == NumberWithUnits.UT_PERCENT) { hh = height.getValue() * deviceViewport.height; } else { hh = StyleAttribute.convertUnitsToPixels(height.getUnits(), height.getValue()); } } else if (viewBox != null) { yy = (float)viewBox.y; hh = (float)viewBox.height; height = new NumberWithUnits(hh, NumberWithUnits.UT_PX); y = new NumberWithUnits(yy, NumberWithUnits.UT_PX); } else { //Estimate size from scene bounding box yy = (float)defaultBounds.getY(); hh = (float)defaultBounds.getHeight(); height = new NumberWithUnits(hh, NumberWithUnits.UT_PX); y = new NumberWithUnits(yy, NumberWithUnits.UT_PX); } clipRect.setRect(xx, yy, ww, hh); if (viewBox == null) { viewXform.setToIdentity(); } else { viewXform.setToTranslation(clipRect.x, clipRect.y); viewXform.scale(clipRect.width, clipRect.height); viewXform.scale(1 / viewBox.width, 1 / viewBox.height); viewXform.translate(-viewBox.x, -viewBox.y); } //For now, treat all preserveAspectRatio as 'none' // viewXform.setToTranslation(viewBox.x, viewBox.y); // viewXform.scale(clipRect.width / viewBox.width, clipRect.height / viewBox.height); // viewXform.translate(-clipRect.x, -clipRect.y); } public void render(Graphics2D g) throws SVGException { prepareViewport(); AffineTransform cachedXform = g.getTransform(); g.transform(viewXform); super.render(g); g.setTransform(cachedXform); } public Shape getShape() { Shape shape = super.getShape(); return viewXform.createTransformedShape(shape); } public Rectangle2D getBoundingBox() throws SVGException { Rectangle2D bbox = super.getBoundingBox(); return viewXform.createTransformedShape(bbox).getBounds2D(); } public float getDeviceWidth() { return clipRect.width; } public float getDeviceHeight() { return clipRect.height; } public Rectangle2D getDeviceRect(Rectangle2D rect) { rect.setRect(clipRect); return rect; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { boolean changeState = super.updateTime(curTime); StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x"))) { NumberWithUnits newVal = sty.getNumberWithUnits(); if (!newVal.equals(x)) { x = newVal; shapeChange = true; } } if (getPres(sty.setName("y"))) { NumberWithUnits newVal = sty.getNumberWithUnits(); if (!newVal.equals(y)) { y = newVal; shapeChange = true; } } if (getPres(sty.setName("width"))) { NumberWithUnits newVal = sty.getNumberWithUnits(); if (!newVal.equals(width)) { width = newVal; shapeChange = true; } } if (getPres(sty.setName("height"))) { NumberWithUnits newVal = sty.getNumberWithUnits(); if (!newVal.equals(height)) { height = newVal; shapeChange = true; } } if (getPres(sty.setName("viewBox"))) { float[] coords = sty.getFloatList(); Rectangle2D.Float newViewBox = new Rectangle2D.Float(coords[0], coords[1], coords[2], coords[3]); if (!newViewBox.equals(viewBox)) { viewBox = newViewBox; shapeChange = true; } } if (shapeChange) { build(); } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/ClipPath.java0000644000175000017500000001123411452231150026212 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Shape; import java.awt.geom.Area; import java.util.Iterator; /** * @author Mark McKay * @author Mark McKay */ public class ClipPath extends SVGElement { public static final int CP_USER_SPACE_ON_USE = 0; public static final int CP_OBJECT_BOUNDING_BOX = 1; int clipPathUnits = CP_USER_SPACE_ON_USE; /** Creates a new instance of Stop */ public ClipPath() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String clipPathUnits = attrs.getValue("clipPathUnits"); if (clipPathUnits.equals("objectBoundingBox")) this.clipPathUnits = CP_OBJECT_BOUNDING_BOX; } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); // if (child instanceof ShapeElement) members.add(child); } /* public void loaderEndElement(SVGLoaderHelper helper) { // super.loaderEndElement(helper); // build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); clipPathUnits = (getPres(sty.setName("clipPathUnits")) && sty.getStringValue().equals("objectBoundingBox")) ? CP_OBJECT_BOUNDING_BOX : CP_USER_SPACE_ON_USE; } public int getClipPathUnits() { return clipPathUnits; } public Shape getClipPathShape() { if (children.size() == 0) return null; if (children.size() == 1) return ((ShapeElement)children.get(0)).getShape(); Area clipArea = null; for (Iterator it = children.iterator(); it.hasNext();) { ShapeElement se = (ShapeElement)it.next(); if (clipArea == null) { Shape shape = se.getShape(); if (shape != null) clipArea = new Area(se.getShape()); continue; } Shape shape = se.getShape(); if (shape != null) clipArea.intersect(new Area(shape)); } return clipArea; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("clipPathUnits"))) { String newUnitsStrn = sty.getStringValue(); int newUnits = newUnitsStrn.equals("objectBoundingBox") ? CP_OBJECT_BOUNDING_BOX : CP_USER_SPACE_ON_USE; if (newUnits != clipPathUnits) { clipPathUnits = newUnits; shapeChange = true; } } if (shapeChange) { build(); } return shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGDisplayPanel.java0000644000175000017500000001250610653423547027475 0ustar moonmoon/* * SVGDisplayPanel.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 12:29 PM */ package com.kitfox.svg; import javax.swing.*; import java.awt.*; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class SVGDisplayPanel extends javax.swing.JPanel implements Scrollable { public static final long serialVersionUID = 1; SVGDiagram diagram = null; float scale = 1f; Color bgColor = null; /** Creates new form SVGDisplayPanel */ public SVGDisplayPanel() { initComponents(); } public SVGDiagram getDiagram() { return diagram; } public void setDiagram(SVGDiagram diagram) { this.diagram = diagram; diagram.setDeviceViewport(getBounds()); setDimension(); } public void setScale(float scale) { this.scale = scale; setDimension(); } public void setBgColor(Color col) { bgColor = col; } private void setDimension() { if (diagram == null) { setPreferredSize(new Dimension(1, 1)); revalidate(); return; } final Rectangle2D.Float rect = new Rectangle2D.Float(); diagram.getViewRect(rect); int w = (int)(rect.width * scale); int h = (int)(rect.height * scale); setPreferredSize(new Dimension(w, h)); revalidate(); } /** * Update this image to reflect the passed time */ public void updateTime(double curTime) throws SVGException { if (diagram == null) return; diagram.updateTime(curTime); } public void paintComponent(Graphics gg) { Graphics2D g = (Graphics2D)gg; if (bgColor != null) { Dimension dim = getSize(); g.setColor(bgColor); g.fillRect(0, 0, dim.width, dim.height); } g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); if (diagram != null) { try { diagram.render(g); } catch (SVGException e) { e.printStackTrace(); } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { formComponentResized(evt); } }); }// //GEN-END:initComponents private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized {//GEN-HEADEREND:event_formComponentResized if (diagram != null) { diagram.setDeviceViewport(getBounds()); setDimension(); } }//GEN-LAST:event_formComponentResized public Dimension getPreferredScrollableViewportSize() { return getPreferredSize(); } public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { if (orientation == SwingConstants.HORIZONTAL) { return visibleRect.width; } else return visibleRect.height; } public boolean getScrollableTracksViewportHeight() { return false; } public boolean getScrollableTracksViewportWidth() { return false; } public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { return getScrollableBlockIncrement(visibleRect, orientation, direction) / 16; } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Font.java0000644000175000017500000001724211345751075025437 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.*; import org.xml.sax.*; import java.util.*; /** * Implements an embedded font. * * SVG specification: http://www.w3.org/TR/SVG/fonts.html * * @author Mark McKay * @author Mark McKay */ public class Font extends SVGElement { int horizOriginX = 0; int horizOriginY = 0; int horizAdvX = -1; //Must be specified int vertOriginX = -1; //Defaults to horizAdvX / 2 int vertOriginY = -1; //Defaults to font's ascent int vertAdvY = -1; //Defaults to one 'em'. See font-face FontFace fontFace = null; MissingGlyph missingGlyph = null; final HashMap glyphs = new HashMap(); /** Creates a new instance of Font */ public Font() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String horizOriginX = attrs.getValue("horiz-origin-x"); String horizOriginY = attrs.getValue("horiz-origin-y"); String horizAdvX = attrs.getValue("horiz-adv-x"); String vertOriginX = attrs.getValue("vert-origin-x"); String vertOriginY = attrs.getValue("vert-origin-y"); String vertAdvY = attrs.getValue("vert-adv-y"); if (horizOriginX != null) this.horizOriginX = XMLParseUtil.parseInt(horizOriginX); if (horizOriginY != null) this.horizOriginY = XMLParseUtil.parseInt(horizOriginY); if (horizAdvX != null) this.horizAdvX = XMLParseUtil.parseInt(horizAdvX); if (vertOriginX != null) this.vertOriginX = XMLParseUtil.parseInt(vertOriginX); if (vertOriginY != null) this.vertOriginY = XMLParseUtil.parseInt(vertOriginY); if (vertAdvY != null) this.vertAdvY = XMLParseUtil.parseInt(vertAdvY); } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); if (child instanceof Glyph) { glyphs.put(((Glyph)child).getUnicode(), child); } else if (child instanceof MissingGlyph) { missingGlyph = (MissingGlyph)child; } else if (child instanceof FontFace) { fontFace = (FontFace)child; } } public void loaderEndElement(SVGLoaderHelper helper) throws SVGParseException { super.loaderEndElement(helper); //build(); helper.universe.registerFont(this); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("horiz-origin-x"))) horizOriginX = sty.getIntValue(); if (getPres(sty.setName("horiz-origin-y"))) horizOriginY = sty.getIntValue(); if (getPres(sty.setName("horiz-adv-x"))) horizAdvX = sty.getIntValue(); if (getPres(sty.setName("vert-origin-x"))) vertOriginX = sty.getIntValue(); if (getPres(sty.setName("vert-origin-y"))) vertOriginY = sty.getIntValue(); if (getPres(sty.setName("vert-adv-y"))) vertAdvY = sty.getIntValue(); } public FontFace getFontFace() { return fontFace; } public MissingGlyph getGlyph(String unicode) { Glyph retVal = (Glyph)glyphs.get(unicode); if (retVal == null) return missingGlyph; return retVal; } public int getHorizOriginX() { return horizOriginX; } public int getHorizOriginY() { return horizOriginY; } public int getHorizAdvX() { return horizAdvX; } public int getVertOriginX() { if (vertOriginX != -1) return vertOriginX; vertOriginX = getHorizAdvX() / 2; return vertOriginX; } public int getVertOriginY() { if (vertOriginY != -1) return vertOriginY; vertOriginY = fontFace.getAscent(); return vertOriginY; } public int getVertAdvY() { if (vertAdvY != -1) return vertAdvY; vertAdvY = fontFace.getUnitsPerEm(); return vertAdvY; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Fonts can't change return false; /* if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("horiz-origin-x"))) { int newVal = sty.getIntValue(); if (newVal != horizOriginX) { horizOriginX = newVal; stateChange = true; } } if (getPres(sty.setName("horiz-origin-y"))) { int newVal = sty.getIntValue(); if (newVal != horizOriginY) { horizOriginY = newVal; stateChange = true; } } if (getPres(sty.setName("horiz-adv-x"))) { int newVal = sty.getIntValue(); if (newVal != horizAdvX) { horizAdvX = newVal; stateChange = true; } } if (getPres(sty.setName("vert-origin-x"))) { int newVal = sty.getIntValue(); if (newVal != vertOriginX) { vertOriginX = newVal; stateChange = true; } } if (getPres(sty.setName("vert-origin-y"))) { int newVal = sty.getIntValue(); if (newVal != vertOriginY) { vertOriginY = newVal; stateChange = true; } } if (getPres(sty.setName("vert-adv-y"))) { int newVal = sty.getIntValue(); if (newVal != vertAdvY) { vertAdvY = newVal; stateChange = true; } } return shapeChange; */ } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGParseException.java0000644000175000017500000000207610627134103030026 0ustar moonmoon/* * SVGException.java * * Created on May 12, 2005, 11:32 PM * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package com.kitfox.svg; /** * * @author kitfox */ public class SVGParseException extends java.lang.Exception { public static final long serialVersionUID = 0; /** * Creates a new instance of SVGException without detail message. */ public SVGParseException() { } /** * Constructs an instance of SVGException with the specified detail message. * @param msg the detail message. */ public SVGParseException(String msg) { super(msg); } public SVGParseException(String msg, Throwable cause) { super(msg, cause); } public SVGParseException(Throwable cause) { super(cause); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Desc.java0000644000175000017500000000334110627134103025367 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 19, 2004, 1:56 AM */ package com.kitfox.svg; /** * Holds title textual information within tree * * @author Mark McKay * @author Mark McKay */ public class Desc extends SVGElement { StringBuffer text = new StringBuffer(); /** Creates a new instance of Stop */ public Desc() { } /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { this.text.append(text); } public String getText() { return text.toString(); } public boolean updateTime(double curTime) { return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGException.java0000644000175000017500000000204510627134103027027 0ustar moonmoon/* * SVGException.java * * Created on May 12, 2005, 11:32 PM * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package com.kitfox.svg; /** * * @author kitfox */ public class SVGException extends java.lang.Exception { public static final long serialVersionUID = 0; /** * Creates a new instance of SVGException without detail message. */ public SVGException() { } /** * Constructs an instance of SVGException with the specified detail message. * @param msg the detail message. */ public SVGException(String msg) { super(msg); } public SVGException(String msg, Throwable cause) { super(msg, cause); } public SVGException(Throwable cause) { super(cause); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Defs.java0000644000175000017500000000417211345751075025410 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import java.awt.*; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class Defs extends TransformableElement { /** Creates a new instance of Stop */ public Defs() { } /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); // members.add(child); } public boolean updateTime(double curTime) throws SVGException { boolean stateChange = false; for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); stateChange = stateChange || ele.updateTime(curTime); } return super.updateTime(curTime) || stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FeLight.java0000644000175000017500000000271710627134103026041 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ abstract public class FeLight extends FilterEffects { /** Creates a new instance of FillElement */ public FeLight() { } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/composite/0000755000175000017500000000000011562044256025657 5ustar moonmoon././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/composite/AdobeCompositeContext.javasvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/composite/AdobeCompositeContext.jav0000644000175000017500000000645510627134103032625 0ustar moonmoon/* * AdobeCompositeContext.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 1, 2004, 6:41 AM */ package com.kitfox.svg.composite; import java.awt.*; import java.awt.image.*; /** * @author Mark McKay * @author Mark McKay */ public class AdobeCompositeContext implements CompositeContext { final int compositeType; final float extraAlpha; float[] rgba_src = new float[4]; float[] rgba_dstIn = new float[4]; float[] rgba_dstOut = new float[4]; /** Creates a new instance of AdobeCompositeContext */ public AdobeCompositeContext(int compositeType, float extraAlpha) { this.compositeType = compositeType; this.extraAlpha = extraAlpha; rgba_dstOut[3] = 1f; } public void compose(Raster src, Raster dstIn, WritableRaster dstOut) { int width = src.getWidth(); int height = src.getHeight(); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { src.getPixel(i, j, rgba_src); dstIn.getPixel(i, j, rgba_dstIn); //Ignore transparent pixels if (rgba_src[3] == 0) { // dstOut.setPixel(i, j, rgba_dstIn); continue; } float alpha = rgba_src[3]; switch (compositeType) { default: case AdobeComposite.CT_NORMAL: rgba_dstOut[0] = rgba_src[0] * alpha + rgba_dstIn[0] * (1f - alpha); rgba_dstOut[1] = rgba_src[1] * alpha + rgba_dstIn[1] * (1f - alpha); rgba_dstOut[2] = rgba_src[2] * alpha + rgba_dstIn[2] * (1f - alpha); break; case AdobeComposite.CT_MULTIPLY: rgba_dstOut[0] = rgba_src[0] * rgba_dstIn[0] * alpha + rgba_dstIn[0] * (1f - alpha); rgba_dstOut[1] = rgba_src[1] * rgba_dstIn[1] * alpha + rgba_dstIn[1] * (1f - alpha); rgba_dstOut[2] = rgba_src[2] * rgba_dstIn[2] * alpha + rgba_dstIn[2] * (1f - alpha); break; } } } } public void dispose() { } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/composite/AdobeComposite.java0000644000175000017500000000435310627134103031414 0ustar moonmoon/* * AdobeComposite.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 1, 2004, 6:40 AM */ package com.kitfox.svg.composite; import java.awt.*; import java.awt.image.*; /** * @author Mark McKay * @author Mark McKay */ public class AdobeComposite implements Composite { public static final int CT_NORMAL = 0; public static final int CT_MULTIPLY = 1; public static final int CT_LAST = 2; final int compositeType; final float extraAlpha; /** Creates a new instance of AdobeComposite */ public AdobeComposite(int compositeType, float extraAlpha) { this.compositeType = compositeType; this.extraAlpha = extraAlpha; if (compositeType < 0 || compositeType >= CT_LAST) { new Exception("Invalid composite type").printStackTrace(); } if (extraAlpha < 0f || extraAlpha > 1f) { new Exception("Invalid alpha").printStackTrace(); } } public int getCompositeType() { return compositeType; } public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel, RenderingHints hints) { return new AdobeCompositeContext(compositeType, extraAlpha); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Glyph.java0000644000175000017500000000560710627134103025603 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.*; import org.xml.sax.*; import java.awt.*; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.pathcmd.*; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; /** * Implements an embedded font. * * SVG specification: http://www.w3.org/TR/SVG/fonts.html * * @author Mark McKay * @author Mark McKay */ public class Glyph extends MissingGlyph { /** * One or more characters indicating the unicode sequence that denotes * this glyph. */ String unicode; /** Creates a new instance of Font */ public Glyph() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); //Get unicode sequence that maps to this glyph unicode = attrs.getValue("unicode"); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { super.loaderEndElement(helper); build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("unicode"))) unicode = sty.getStringValue(); } public String getUnicode() { return unicode; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Fonts can't change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/package-info.java0000644000175000017500000000045110627134103027034 0ustar moonmoon/** * Provides the nodes of an SVG scene graph. This graph can be queried, updated * and picked against at runtime. See the online docs for instructions on * how to use SVGSalamander * * @author Mark McKay (C) 2005 */ package com.kitfox.svg;svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Text.java0000644000175000017500000004071211452231150025435 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.font.*; import java.awt.geom.*; import java.util.*; import java.util.regex.*; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; /** * @author Mark McKay * @author Mark McKay */ public class Text extends ShapeElement { float x = 0; float y = 0; AffineTransform transform = null; String fontFamily; float fontSize; //List of strings and tspans containing the content of this node LinkedList content = new LinkedList(); Shape textShape; public static final int TXAN_START = 0; public static final int TXAN_MIDDLE = 1; public static final int TXAN_END = 2; int textAnchor = TXAN_START; public static final int TXST_NORMAL = 0; public static final int TXST_ITALIC = 1; public static final int TXST_OBLIQUE = 2; int fontStyle; public static final int TXWE_NORMAL = 0; public static final int TXWE_BOLD = 1; public static final int TXWE_BOLDER = 2; public static final int TXWE_LIGHTER = 3; public static final int TXWE_100 = 4; public static final int TXWE_200 = 5; public static final int TXWE_300 = 6; public static final int TXWE_400 = 7; public static final int TXWE_500 = 8; public static final int TXWE_600 = 9; public static final int TXWE_700 = 10; public static final int TXWE_800 = 11; public static final int TXWE_900 = 12; int fontWeight; /** Creates a new instance of Stop */ public Text() { } public void appendText(String text) { content.addLast(text); } public void appendTspan(Tspan tspan) throws SVGElementException { super.loaderAddChild(null, tspan); content.addLast(tspan); // tspan.setParent(this); } /** * Discard cached information */ public void rebuild() throws SVGException { build(); } public java.util.List getContent() { return content; } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x = attrs.getValue("x"); String y = attrs.getValue("y"); //String transform = attrs.getValue("transform"); this.x = XMLParseUtil.parseFloat(x); this.y = XMLParseUtil.parseFloat(y); } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); content.addLast(child); } /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { Matcher matchWs = Pattern.compile("\\s*").matcher(text); if (!matchWs.matches()) content.addLast(text); } public void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getStyle(sty.setName("font-family"))) fontFamily = sty.getStringValue(); else fontFamily = "Sans Serif"; if (getStyle(sty.setName("font-size"))) fontSize = sty.getFloatValueWithUnits(); else fontSize = 12f; if (getStyle(sty.setName("font-style"))) { String s = sty.getStringValue(); if ("normal".equals(s)) { fontStyle = TXST_NORMAL; } else if ("italic".equals(s)) { fontStyle = TXST_ITALIC; } else if ("oblique".equals(s)) { fontStyle = TXST_OBLIQUE; } } else fontStyle = TXST_NORMAL; if (getStyle(sty.setName("font-weight"))) { String s = sty.getStringValue(); if ("normal".equals(s)) { fontWeight = TXWE_NORMAL; } else if ("bold".equals(s)) { fontWeight = TXWE_BOLD; } } else fontWeight = TXWE_BOLD; if (getStyle(sty.setName("text-anchor"))) { String s = sty.getStringValue(); if (s.equals("middle")) textAnchor = TXAN_MIDDLE; else if (s.equals("end")) textAnchor = TXAN_END; else textAnchor = TXAN_START; } else textAnchor = TXAN_START; //text anchor //text-decoration //text-rendering buildFont(); } protected void buildFont() throws SVGException { int style; switch (fontStyle) { case TXST_ITALIC: style = java.awt.Font.ITALIC; break; default: style = java.awt.Font.PLAIN; break; } int weight; switch (fontWeight) { case TXWE_BOLD: case TXWE_BOLDER: weight = java.awt.Font.BOLD; break; default: weight = java.awt.Font.PLAIN; break; } //Get font Font font = diagram.getUniverse().getFont(fontFamily); if (font == null) { // System.err.println("Could not load font"); java.awt.Font sysFont = new java.awt.Font(fontFamily, style | weight, (int)fontSize); buildSysFont(sysFont); return; } // font = new java.awt.Font(font.getFamily(), style | weight, font.getSize()); // Area textArea = new Area(); GeneralPath textPath = new GeneralPath(); textShape = textPath; float cursorX = x, cursorY = y; FontFace fontFace = font.getFontFace(); //int unitsPerEm = fontFace.getUnitsPerEm(); int ascent = fontFace.getAscent(); float fontScale = fontSize / (float)ascent; // AffineTransform oldXform = g.getTransform(); AffineTransform xform = new AffineTransform(); for (Iterator it = content.iterator(); it.hasNext();) { Object obj = it.next(); if (obj instanceof String) { String text = (String)obj; strokeWidthScalar = 1f / fontScale; for (int i = 0; i < text.length(); i++) { xform.setToIdentity(); xform.setToTranslation(cursorX, cursorY); xform.scale(fontScale, fontScale); // g.transform(xform); String unicode = text.substring(i, i + 1); MissingGlyph glyph = font.getGlyph(unicode); Shape path = glyph.getPath(); if (path != null) { path = xform.createTransformedShape(path); textPath.append(path, false); } // else glyph.render(g); cursorX += fontScale * glyph.getHorizAdvX(); // g.setTransform(oldXform); } strokeWidthScalar = 1f; } else if (obj instanceof Tspan) { Tspan tspan = (Tspan)obj; xform.setToIdentity(); xform.setToTranslation(cursorX, cursorY); xform.scale(fontScale, fontScale); // tspan.setCursorX(cursorX); // tspan.setCursorY(cursorY); Shape tspanShape = tspan.getShape(); tspanShape = xform.createTransformedShape(tspanShape); textPath.append(tspanShape, false); // tspan.render(g); // cursorX = tspan.getCursorX(); // cursorY = tspan.getCursorY(); } } switch (textAnchor) { case TXAN_MIDDLE: { AffineTransform at = new AffineTransform(); at.translate(-textPath.getBounds2D().getWidth() / 2, 0); textPath.transform(at); break; } case TXAN_END: { AffineTransform at = new AffineTransform(); at.translate(-textPath.getBounds2D().getWidth(), 0); textPath.transform(at); break; } } } private void buildSysFont(java.awt.Font font) throws SVGException { GeneralPath textPath = new GeneralPath(); textShape = textPath; float cursorX = x, cursorY = y; // FontMetrics fm = g.getFontMetrics(font); FontRenderContext frc = new FontRenderContext(null, true, true); // FontFace fontFace = font.getFontFace(); //int unitsPerEm = fontFace.getUnitsPerEm(); // int ascent = fm.getAscent(); // float fontScale = fontSize / (float)ascent; // AffineTransform oldXform = g.getTransform(); AffineTransform xform = new AffineTransform(); for (Iterator it = content.iterator(); it.hasNext();) { Object obj = it.next(); if (obj instanceof String) { String text = (String)obj; Shape textShape = font.createGlyphVector(frc, text).getOutline(cursorX, cursorY); textPath.append(textShape, false); // renderShape(g, textShape); // g.drawString(text, cursorX, cursorY); Rectangle2D rect = font.getStringBounds(text, frc); cursorX += (float)rect.getWidth(); } else if (obj instanceof Tspan) { /* Tspan tspan = (Tspan)obj; xform.setToIdentity(); xform.setToTranslation(cursorX, cursorY); Shape tspanShape = tspan.getShape(); tspanShape = xform.createTransformedShape(tspanShape); textArea.add(new Area(tspanShape)); cursorX += tspanShape.getBounds2D().getWidth(); */ Tspan tspan = (Tspan)obj; tspan.setCursorX(cursorX); tspan.setCursorY(cursorY); tspan.addShape(textPath); cursorX = tspan.getCursorX(); cursorY = tspan.getCursorY(); } } switch (textAnchor) { case TXAN_MIDDLE: { AffineTransform at = new AffineTransform(); at.translate(-textPath.getBounds2D().getWidth() / 2, 0); textPath.transform(at); break; } case TXAN_END: { AffineTransform at = new AffineTransform(); at.translate(-textPath.getBounds2D().getWidth(), 0); textPath.transform(at); break; } } } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, textShape); finishLayer(g); } public Shape getShape() { return shapeToParent(textShape); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(textShape.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; shapeChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; shapeChange = true; } } if (getPres(sty.setName("font-family"))) { String newVal = sty.getStringValue(); if (!newVal.equals(fontFamily)) { fontFamily = newVal; shapeChange = true; } } if (getPres(sty.setName("font-size"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != fontSize) { fontSize = newVal; shapeChange = true; } } if (getStyle(sty.setName("font-style"))) { String s = sty.getStringValue(); int newVal = fontStyle; if ("normal".equals(s)) { newVal = TXST_NORMAL; } else if ("italic".equals(s)) { newVal = TXST_ITALIC; } else if ("oblique".equals(s)) { newVal = TXST_OBLIQUE; } if (newVal != fontStyle) { fontStyle = newVal; shapeChange = true; } } if (getStyle(sty.setName("font-weight"))) { String s = sty.getStringValue(); int newVal = fontWeight; if ("normal".equals(s)) { newVal = TXWE_NORMAL; } else if ("bold".equals(s)) { newVal = TXWE_BOLD; } if (newVal != fontWeight) { fontWeight = newVal; shapeChange = true; } } if (shapeChange) { build(); // buildFont(); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Tspan.java0000644000175000017500000002542210627134103025602 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.font.*; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; /** * @author Mark McKay * @author Mark McKay */ public class Tspan extends ShapeElement { float[] x = null; float[] y = null; float[] dx = null; float[] dy = null; float[] rotate = null; private String text = ""; float cursorX; float cursorY; // Shape tspanShape; /** Creates a new instance of Stop */ public Tspan() { } public float getCursorX() { return cursorX; } public float getCursorY() { return cursorY; } public void setCursorX(float cursorX) { this.cursorX = cursorX; } public void setCursorY(float cursorY) { this.cursorY = cursorY; } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x = attrs.getValue("x"); String y = attrs.getValue("y"); String dx = attrs.getValue("dx"); String dy = attrs.getValue("dy"); String rotate = attrs.getValue("rotate"); if (x != null) this.x = XMLParseUtil.parseFloatList(x); if (y != null) this.y = XMLParseUtil.parseFloatList(y); if (dx != null) this.dx = XMLParseUtil.parseFloatList(dx); if (dy != null) this.dy = XMLParseUtil.parseFloatList(dy); if (rotate != null) { this.rotate = XMLParseUtil.parseFloatList(rotate); for (int i = 0; i < this.rotate.length; i++) this.rotate[i] = (float)Math.toRadians(this.rotate[i]); } } */ /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { this.text += text; } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x"))) x = sty.getFloatList(); if (getPres(sty.setName("y"))) y = sty.getFloatList(); if (getPres(sty.setName("dx"))) dx = sty.getFloatList(); if (getPres(sty.setName("dy"))) dy = sty.getFloatList(); if (getPres(sty.setName("rotate"))) { rotate = sty.getFloatList(); for (int i = 0; i < this.rotate.length; i++) { rotate[i] = (float)Math.toRadians(this.rotate[i]); } } } public void addShape(GeneralPath addShape) throws SVGException { if (x != null) { cursorX = x[0]; cursorY = y[0]; } else if (dx != null) { cursorX += dx[0]; cursorY += dy[0]; } StyleAttribute sty = new StyleAttribute(); String fontFamily = null; if (getStyle(sty.setName("font-family"))) { fontFamily = sty.getStringValue(); } float fontSize = 12f; if (getStyle(sty.setName("font-size"))) { fontSize = sty.getFloatValueWithUnits(); } //Get font Font font = diagram.getUniverse().getFont(fontFamily); if (font == null) { addShapeSysFont(addShape, font, fontFamily, fontSize); return; } FontFace fontFace = font.getFontFace(); int ascent = fontFace.getAscent(); float fontScale = fontSize / (float)ascent; AffineTransform xform = new AffineTransform(); strokeWidthScalar = 1f / fontScale; int posPtr = 1; for (int i = 0; i < text.length(); i++) { xform.setToIdentity(); xform.setToTranslation(cursorX, cursorY); xform.scale(fontScale, fontScale); if (rotate != null) xform.rotate(rotate[posPtr]); String unicode = text.substring(i, i + 1); MissingGlyph glyph = font.getGlyph(unicode); Shape path = glyph.getPath(); if (path != null) { path = xform.createTransformedShape(path); addShape.append(path, false); } if (x != null && posPtr < x.length) { cursorX = x[posPtr]; cursorY = y[posPtr++]; } else if (dx != null && posPtr < dx.length) { cursorX += dx[posPtr]; cursorY += dy[posPtr++]; } cursorX += fontScale * glyph.getHorizAdvX(); } strokeWidthScalar = 1f; } private void addShapeSysFont(GeneralPath addShape, Font font, String fontFamily, float fontSize) { java.awt.Font sysFont = new java.awt.Font(fontFamily, java.awt.Font.PLAIN, (int)fontSize); FontRenderContext frc = new FontRenderContext(null, true, true); GlyphVector textVector = sysFont.createGlyphVector(frc, text); AffineTransform xform = new AffineTransform(); int posPtr = 1; for (int i = 0; i < text.length(); i++) { xform.setToIdentity(); xform.setToTranslation(cursorX, cursorY); if (rotate != null) xform.rotate(rotate[Math.min(i, rotate.length - 1)]); String unicode = text.substring(i, i + 1); Shape glyphOutline = textVector.getGlyphOutline(i); GlyphMetrics glyphMetrics = textVector.getGlyphMetrics(i); glyphOutline = xform.createTransformedShape(glyphOutline); addShape.append(glyphOutline, false); if (x != null && posPtr < x.length) { cursorX = x[posPtr]; cursorY = y[posPtr++]; } else if (dx != null && posPtr < dx.length) { cursorX += dx[posPtr]; cursorY += dy[posPtr++]; } } } public void render(Graphics2D g) throws SVGException { if (x != null) { cursorX = x[0]; cursorY = y[0]; } else if (dx != null) { cursorX += dx[0]; cursorY += dy[0]; } StyleAttribute sty = new StyleAttribute(); String fontFamily = null; if (getPres(sty.setName("font-family"))) { fontFamily = sty.getStringValue(); } float fontSize = 12f; if (getPres(sty.setName("font-size"))) { fontSize = sty.getFloatValueWithUnits(); } //Get font Font font = diagram.getUniverse().getFont(fontFamily); if (font == null) { System.err.println("Could not load font"); java.awt.Font sysFont = new java.awt.Font(fontFamily, java.awt.Font.PLAIN, (int)fontSize); renderSysFont(g, sysFont); return; } FontFace fontFace = font.getFontFace(); int ascent = fontFace.getAscent(); float fontScale = fontSize / (float)ascent; AffineTransform oldXform = g.getTransform(); AffineTransform xform = new AffineTransform(); strokeWidthScalar = 1f / fontScale; int posPtr = 1; for (int i = 0; i < text.length(); i++) { xform.setToTranslation(cursorX, cursorY); xform.scale(fontScale, fontScale); g.transform(xform); String unicode = text.substring(i, i + 1); MissingGlyph glyph = font.getGlyph(unicode); Shape path = glyph.getPath(); if (path != null) { renderShape(g, path); } else glyph.render(g); if (x != null && posPtr < x.length) { cursorX = x[posPtr]; cursorY = y[posPtr++]; } else if (dx != null && posPtr < dx.length) { cursorX += dx[posPtr]; cursorY += dy[posPtr++]; } cursorX += fontScale * glyph.getHorizAdvX(); g.setTransform(oldXform); } strokeWidthScalar = 1f; } protected void renderSysFont(Graphics2D g, java.awt.Font font) throws SVGException { int posPtr = 1; FontRenderContext frc = g.getFontRenderContext(); Shape textShape = font.createGlyphVector(frc, text).getOutline(cursorX, cursorY); renderShape(g, textShape); Rectangle2D rect = font.getStringBounds(text, frc); cursorX += (float)rect.getWidth(); } public Shape getShape() { return null; //return shapeToParent(tspanShape); } public Rectangle2D getBoundingBox() { return null; //return boundsToParent(tspanShape.getBounds2D()); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Tspan does not change return false; } public String getText() { return text; } public void setText(String text) { this.text = text; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Filter.java0000644000175000017500000001506511345751075025757 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; /** * @author Mark McKay * @author Mark McKay */ public class Filter extends SVGElement { public static final int FU_OBJECT_BOUNDING_BOX = 0; public static final int FU_USER_SPACE_ON_USE = 1; protected int filterUnits = FU_OBJECT_BOUNDING_BOX; public static final int PU_OBJECT_BOUNDING_BOX = 0; public static final int PU_USER_SPACE_ON_USE = 1; protected int primitiveUnits = PU_OBJECT_BOUNDING_BOX; float x = 0f; float y = 0f; float width = 1f; float height = 1f; Point2D filterRes = new Point2D.Double(); URL href = null; final ArrayList filterEffects = new ArrayList(); /** Creates a new instance of FillElement */ public Filter() { } /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); if (child instanceof FilterEffects) { filterEffects.add(child); } } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; if (getPres(sty.setName("filterUnits"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) filterUnits = FU_USER_SPACE_ON_USE; else filterUnits = FU_OBJECT_BOUNDING_BOX; } if (getPres(sty.setName("primitiveUnits"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) primitiveUnits = PU_USER_SPACE_ON_USE; else primitiveUnits = PU_OBJECT_BOUNDING_BOX; } if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); href = src.toURL(); } } catch (Exception e) { throw new SVGException(e); } } public float getX() { return x; } public float getY() { return y; } public float getWidth() { return width; } public float getHeight() { return height; } public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; stateChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; stateChange = true; } } if (getPres(sty.setName("width"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != width) { width = newVal; stateChange = true; } } if (getPres(sty.setName("height"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != height) { height = newVal; stateChange = true; } } try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); URL newVal = src.toURL(); if (!newVal.equals(href)) { href = newVal; stateChange = true; } } } catch (Exception e) { throw new SVGException(e); } if (getPres(sty.setName("filterUnits"))) { int newVal; String strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) newVal = FU_USER_SPACE_ON_USE; else newVal = FU_OBJECT_BOUNDING_BOX; if (newVal != filterUnits) { filterUnits = newVal; stateChange = true; } } if (getPres(sty.setName("primitiveUnits"))) { int newVal; String strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) newVal = PU_USER_SPACE_ON_USE; else newVal = PU_OBJECT_BOUNDING_BOX; if (newVal != filterUnits) { primitiveUnits = newVal; stateChange = true; } } return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGDisplayPanel.form0000644000175000017500000000206510627134103027502 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Line.java0000644000175000017500000001147111452231150025400 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; /** * @author Mark McKay * @author Mark McKay */ public class Line extends ShapeElement { float x1 = 0f; float y1 = 0f; float x2 = 0f; float y2 = 0f; Line2D.Float line; // RectangularShape rect; /** Creates a new instance of Rect */ public Line() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x1 = attrs.getValue("x1"); String y1 = attrs.getValue("y1"); String x2 = attrs.getValue("x2"); String y2 = attrs.getValue("y2"); this.x1 = XMLParseUtil.parseFloat(x1); this.y1 = XMLParseUtil.parseFloat(y1); this.x2 = XMLParseUtil.parseFloat(x2); this.y2 = XMLParseUtil.parseFloat(y2); build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x1"))) x1 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y1"))) y1 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("x2"))) x2 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y2"))) y2 = sty.getFloatValueWithUnits(); line = new Line2D.Float(x1, y1, x2, y2); } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, line); finishLayer(g); } public Shape getShape() { return shapeToParent(line); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(line.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x1"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x1) { x1 = newVal; shapeChange = true; } } if (getPres(sty.setName("y1"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y1) { y1 = newVal; shapeChange = true; } } if (getPres(sty.setName("x2"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x2) { x2 = newVal; shapeChange = true; } } if (getPres(sty.setName("y2"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y2) { y2 = newVal; shapeChange = true; } } if (shapeChange) { build(); // line = new Line2D.Float(x1, y1, x2, y2); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Polygon.java0000644000175000017500000001215311452231150026136 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.XMLParseUtil; import java.awt.geom.*; import java.awt.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class Polygon extends ShapeElement { int fillRule = GeneralPath.WIND_NON_ZERO; String pointsStrn = ""; // float[] points = null; GeneralPath path; /** Creates a new instance of Rect */ public Polygon() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); points = XMLParseUtil.parseFloatList(attrs.getValue("points")); build(); } */ /* public void build() { StyleAttribute styleAttrib = getStyle("fill-rule"); String fillRule = (styleAttrib == null) ? "nonzero" : styleAttrib.getStringValue(); path = new GeneralPath( fillRule.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO, points.length / 2); path.moveTo(points[0], points[1]); for (int i = 2; i < points.length; i += 2) { path.lineTo(points[i], points[i + 1]); } path.closePath(); } */ //static int yyyyy = 0; protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("points"))) pointsStrn = sty.getStringValue(); String fillRuleStrn = getStyle(sty.setName("fill-rule")) ? sty.getStringValue() : "nonzero"; fillRule = fillRuleStrn.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; buildPath(); } protected void buildPath() { float[] points = XMLParseUtil.parseFloatList(pointsStrn); path = new GeneralPath(fillRule, points.length / 2); path.moveTo(points[0], points[1]); for (int i = 2; i < points.length; i += 2) { path.lineTo(points[i], points[i + 1]); } path.closePath(); } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, path); finishLayer(g); } public Shape getShape() { return shapeToParent(path); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(path.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getStyle(sty.setName("fill-rule"))) { int newVal = sty.getStringValue().equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; if (newVal != fillRule) { fillRule = newVal; shapeChange = true; } } if (getPres(sty.setName("points"))) { String newVal = sty.getStringValue(); if (!newVal.equals(pointsStrn)) { pointsStrn = newVal; shapeChange = true; } } if (shapeChange) { build(); // buildPath(); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Polyline.java0000644000175000017500000001061611452231150026304 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import java.awt.geom.*; import java.awt.*; import com.kitfox.svg.xml.*; /** * @author Mark McKay * @author Mark McKay */ public class Polyline extends ShapeElement { int fillRule = GeneralPath.WIND_NON_ZERO; String pointsStrn = ""; // float[] points = null; GeneralPath path; /** Creates a new instance of Rect */ public Polyline() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); points = XMLParseUtil.parseFloatList(attrs.getValue("points")); build(); } */ public void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("points"))) pointsStrn = sty.getStringValue(); String fillRuleStrn = getStyle(sty.setName("fill-rule")) ? sty.getStringValue() : "nonzero"; fillRule = fillRuleStrn.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; buildPath(); } protected void buildPath() { float[] points = XMLParseUtil.parseFloatList(pointsStrn); path = new GeneralPath(fillRule, points.length / 2); path.moveTo(points[0], points[1]); for (int i = 2; i < points.length; i += 2) { path.lineTo(points[i], points[i + 1]); } } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, path); finishLayer(g); } public Shape getShape() { return shapeToParent(path); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(path.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getStyle(sty.setName("fill-rule"))) { int newVal = sty.getStringValue().equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; if (newVal != fillRule) { fillRule = newVal; shapeChange = true; } } if (getPres(sty.setName("points"))) { String newVal = sty.getStringValue(); if (!newVal.equals(pointsStrn)) { pointsStrn = newVal; shapeChange = true; } } if (shapeChange) { build(); // buildPath(); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FePointLight.java0000644000175000017500000000623510627134103027052 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class FePointLight extends FeLight { float x = 0f; float y = 0f; float z = 0f; /** Creates a new instance of FillElement */ public FePointLight() { } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("z"))) z = sty.getFloatValueWithUnits(); } public float getX() { return x; } public float getY() { return y; } public float getZ() { return z; } public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; stateChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; stateChange = true; } } if (getPres(sty.setName("z"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != z) { z = newVal; stateChange = true; } } return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Group.java0000644000175000017500000002121711345751075025622 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.Iterator; import java.util.List; /** * @author Mark McKay * @author Mark McKay */ public class Group extends ShapeElement { //Cache bounding box for faster clip testing Rectangle2D boundingBox; Shape cachedShape; //Cache clip bounds final Rectangle clipBounds = new Rectangle(); /** Creates a new instance of Stop */ public Group() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); //String transform = attrs.getValue("transform"); } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); // members.add(child); } protected boolean outsideClip(Graphics2D g) throws SVGException { g.getClipBounds(clipBounds); Rectangle2D rect = getBoundingBox(); //if (rect == null) //{ // rect = getBoundingBox(); //} // if (rect.intersects(clipBounds)) if (rect.intersects(clipBounds)) { return false; } return true; } void pick(Point2D point, boolean boundingBox, List retVec) throws SVGException { Point2D xPoint = new Point2D.Double(point.getX(), point.getY()); if (xform != null) { try { xform.inverseTransform(point, xPoint); } catch (NoninvertibleTransformException ex) { throw new SVGException(ex); } } for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { RenderableElement rendEle = (RenderableElement)ele; rendEle.pick(xPoint, boundingBox, retVec); } } } void pick(Rectangle2D pickArea, AffineTransform ltw, boolean boundingBox, List retVec) throws SVGException { if (xform != null) { ltw = new AffineTransform(ltw); ltw.concatenate(xform); } for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { RenderableElement rendEle = (RenderableElement)ele; rendEle.pick(pickArea, ltw, boundingBox, retVec); } } } public void render(Graphics2D g) throws SVGException { //Don't process if not visible StyleAttribute styleAttrib = new StyleAttribute(); if (getStyle(styleAttrib.setName("visibility"))) { if (!styleAttrib.getStringValue().equals("visible")) return; } //Do not process offscreen groups boolean ignoreClip = diagram.ignoringClipHeuristic(); if (!ignoreClip && outsideClip(g)) return; beginLayer(g); Iterator it = children.iterator(); try { g.getClipBounds(clipBounds); } catch (Exception e) { //For some reason, getClipBounds can throw a null pointer exception for // some types of Graphics2D ignoreClip = true; } while (it.hasNext()) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { RenderableElement rendEle = (RenderableElement)ele; // if (shapeEle == null) continue; if (!(ele instanceof Group)) { //Skip if clipping area is outside our bounds if (!ignoreClip && !rendEle.getBoundingBox().intersects(clipBounds)) { continue; } } rendEle.render(g); } } finishLayer(g); } /** * Retrieves the cached bounding box of this group */ public Shape getShape() { if (cachedShape == null) calcShape(); return cachedShape; } public void calcShape() { Area retShape = new Area(); for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof ShapeElement) { ShapeElement shpEle = (ShapeElement)ele; Shape shape = shpEle.getShape(); if (shape != null) { retShape.add(new Area(shape)); } } } cachedShape = shapeToParent(retShape); } /** * Retrieves the cached bounding box of this group */ public Rectangle2D getBoundingBox() throws SVGException { if (boundingBox == null) calcBoundingBox(); // calcBoundingBox(); return boundingBox; } /** * Recalculates the bounding box by taking the union of the bounding boxes * of all children. Caches the result. */ public void calcBoundingBox() throws SVGException { // Rectangle2D retRect = new Rectangle2D.Float(); Rectangle2D retRect = null; for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { RenderableElement rendEle = (RenderableElement)ele; Rectangle2D bounds = rendEle.getBoundingBox(); if (bounds != null) { if (retRect == null) retRect = bounds; else retRect = retRect.createUnion(bounds); } } } // if (xform != null) // { // retRect = xform.createTransformedShape(retRect).getBounds2D(); // } //If no contents, use degenerate rectangle if (retRect == null) retRect = new Rectangle2D.Float(); boundingBox = boundsToParent(retRect); } public boolean updateTime(double curTime) throws SVGException { boolean changeState = super.updateTime(curTime); Iterator it = children.iterator(); //Distribute message to all members of this group while (it.hasNext()) { SVGElement ele = (SVGElement)it.next(); boolean updateVal = ele.updateTime(curTime); changeState = changeState || updateVal; //Update our shape if shape aware children change if (ele instanceof ShapeElement) cachedShape = null; if (ele instanceof RenderableElement) boundingBox = null; } return changeState; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pattern/0000755000175000017500000000000011562044256025332 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pattern/PatternPaint.java0000644000175000017500000000365510627134103030607 0ustar moonmoon/* * PatternPaint.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 1, 2004, 3:37 AM */ package com.kitfox.svg.pattern; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; /** * @author Mark McKay * @author Mark McKay */ public class PatternPaint implements Paint { BufferedImage source; //Image we're rendering from AffineTransform xform; /** Creates a new instance of PatternPaint */ public PatternPaint(BufferedImage source, AffineTransform xform) { this.source = source; this.xform = xform; } public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds, AffineTransform xform, RenderingHints hints) { return new PatternPaintContext(source, deviceBounds, xform, this.xform); } public int getTransparency() { return source.getColorModel().getTransparency(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pattern/PatternPaintContext.java0000644000175000017500000000775210627134103032156 0ustar moonmoon/* * PatternPaintContext.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on April 1, 2004, 3:37 AM */ package com.kitfox.svg.pattern; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; /** * @author Mark McKay * @author Mark McKay */ public class PatternPaintContext implements PaintContext { BufferedImage source; //Image we're rendering from Rectangle deviceBounds; //int size of rectangle we're rendering to // AffineTransform userXform; //xform from user space to device space // AffineTransform distortXform; //distortion applied to this pattern AffineTransform xform; //distortion applied to this pattern int sourceWidth; int sourceHeight; //Raster we use to build tile BufferedImage buf; /** Creates a new instance of PatternPaintContext */ public PatternPaintContext(BufferedImage source, Rectangle deviceBounds, AffineTransform userXform, AffineTransform distortXform) { //System.err.println("Bounds " + deviceBounds); this.source = source; this.deviceBounds = deviceBounds; try { // this.distortXform = distortXform.createInverse(); // this.userXform = userXform.createInverse(); // xform = userXform.createInverse(); // xform.concatenate(distortXform.createInverse()); xform = distortXform.createInverse(); xform.concatenate(userXform.createInverse()); } catch (Exception e) { e.printStackTrace(); } sourceWidth = source.getWidth(); sourceHeight = source.getHeight(); } public void dispose() { } public ColorModel getColorModel() { return source.getColorModel(); } public Raster getRaster(int x, int y, int w, int h) { //System.err.println("" + x + ", " + y + ", " + w + ", " + h); if (buf == null || buf.getWidth() != w || buf.getHeight() != buf.getHeight()) { buf = new BufferedImage(w, h, source.getType()); } // Point2D.Float srcPt = new Point2D.Float(), srcPt2 = new Point2D.Float(), destPt = new Point2D.Float(); Point2D.Float srcPt = new Point2D.Float(), destPt = new Point2D.Float(); for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { destPt.setLocation(i + x, j + y); xform.transform(destPt, srcPt); // userXform.transform(destPt, srcPt2); // distortXform.transform(srcPt2, srcPt); int ii = ((int)srcPt.x) % sourceWidth; if (ii < 0) ii += sourceWidth; int jj = ((int)srcPt.y) % sourceHeight; if (jj < 0) jj += sourceHeight; buf.setRGB(i, j, source.getRGB(ii, jj)); } } return buf.getData(); } public static void main(String[] argv) { int i = -4; System.err.println("Hello " + (i % 4)); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Ellipse.java0000644000175000017500000001267411452231150026114 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.*; import org.xml.sax.*; import java.awt.*; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class Ellipse extends ShapeElement { float cx = 0.0f; float cy = 0.0f; float rx = 0.0f; float ry = 0.0f; Ellipse2D.Float ellipse = new Ellipse2D.Float(); /** Creates a new instance of Rect */ public Ellipse() { } /* protected void init(String idIn, Style parentStyle, String cx, String cy, String rx, String ry) { super.init(idIn, parentStyle); this.cx = parseDouble(cx); this.cy = parseDouble(cy); this.rx = parseDouble(rx); this.ry = parseDouble(ry); setBounds(this.cx - this.rx, this.cy - this.ry, this.rx * 2.0, this.ry * 2.0); } */ /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String cx = attrs.getValue("cx"); String cy = attrs.getValue("cy"); String rx = attrs.getValue("rx"); String ry = attrs.getValue("ry"); this.cx = XMLParseUtil.parseDouble(cx); this.cy = XMLParseUtil.parseDouble(cy); this.rx = XMLParseUtil.parseDouble(rx); this.ry = XMLParseUtil.parseDouble(ry); build(); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { super.loaderEndElement(helper); build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("cx"))) cx = sty.getFloatValueWithUnits(); if (getPres(sty.setName("cy"))) cy = sty.getFloatValueWithUnits(); if (getPres(sty.setName("rx"))) rx = sty.getFloatValueWithUnits(); if (getPres(sty.setName("ry"))) ry = sty.getFloatValueWithUnits(); ellipse.setFrame(cx - rx, cy - ry, rx * 2f, ry * 2f); } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, ellipse); finishLayer(g); } public Shape getShape() { return shapeToParent(ellipse); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(ellipse.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("cx"))) { float newCx = sty.getFloatValueWithUnits(); if (newCx != cx) { cx = newCx; shapeChange = true; } } if (getPres(sty.setName("cy"))) { float newCy = sty.getFloatValueWithUnits(); if (newCy != cy) { cy = newCy; shapeChange = true; } } if (getPres(sty.setName("rx"))) { float newRx = sty.getFloatValueWithUnits(); if (newRx != rx) { rx = newRx; shapeChange = true; } } if (getPres(sty.setName("ry"))) { float newRy = sty.getFloatValueWithUnits(); if (newRy != ry) { ry = newRy; shapeChange = true; } } if (shapeChange) { build(); // ellipse.setFrame(cx - rx, cy - ry, rx * 2f, ry * 2f); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Gradient.java0000644000175000017500000002172611345751075026270 0ustar moonmoon/* * Gradient.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 3:25 AM */ package com.kitfox.svg; import java.net.*; import java.util.*; import java.awt.geom.*; import java.awt.*; import com.kitfox.svg.xml.*; /** * @author Mark McKay * @author Mark McKay */ abstract public class Gradient extends FillElement { public static final int SM_PAD = 0; public static final int SM_REPEAT = 1; public static final int SM_REFLECT = 2; int spreadMethod = SM_PAD; public static final int GU_OBJECT_BOUNDING_BOX = 0; public static final int GU_USER_SPACE_ON_USE = 1; protected int gradientUnits = GU_OBJECT_BOUNDING_BOX; //Either this gradient contains a list of stops, or it will take it's // stops from the referenced gradient ArrayList stops = new ArrayList(); URI stopRef = null; // Gradient stopRef = null; protected AffineTransform gradientTransform = null; //Cache arrays of stop values here float[] stopFractions; Color[] stopColors; /** Creates a new instance of Gradient */ public Gradient() { } /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); if (!(child instanceof Stop)) return; appendStop((Stop)child); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; if (getPres(sty.setName("spreadMethod"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("repeat")) spreadMethod = SM_REPEAT; else if (strn.equals("reflect")) spreadMethod = SM_REFLECT; else spreadMethod = SM_PAD; } if (getPres(sty.setName("gradientUnits"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) gradientUnits = GU_USER_SPACE_ON_USE; else gradientUnits = GU_OBJECT_BOUNDING_BOX; } if (getPres(sty.setName("gradientTransform"))) gradientTransform = parseTransform(sty.getStringValue()); //If we still don't have one, set it to identity if (gradientTransform == null) gradientTransform = new AffineTransform(); //Check to see if we're using our own stops or referencing someone else's if (getPres(sty.setName("xlink:href"))) { try { stopRef = sty.getURIValue(getXMLBase()); //System.err.println("Gradient: " + sty.getStringValue() + ", " + getXMLBase() + ", " + src); // URI src = getXMLBase().resolve(href); // stopRef = (Gradient)diagram.getUniverse().getElement(src); } catch (Exception e) { throw new SVGException("Could not resolve relative URL in Gradient: " + sty.getStringValue() + ", " + getXMLBase(), e); } } } public float[] getStopFractions() { if (stopRef != null) { Gradient grad = (Gradient)diagram.getUniverse().getElement(stopRef); return grad.getStopFractions(); } if (stopFractions != null) return stopFractions; stopFractions = new float[stops.size()]; int idx = 0; for (Iterator it = stops.iterator(); it.hasNext();) { Stop stop = (Stop)it.next(); float val = stop.offset; if (idx != 0 && val < stopFractions[idx - 1]) val = stopFractions[idx - 1]; stopFractions[idx++] = val; } return stopFractions; } public Color[] getStopColors() { if (stopRef != null) { Gradient grad = (Gradient)diagram.getUniverse().getElement(stopRef); return grad.getStopColors(); } if (stopColors != null) return stopColors; stopColors = new Color[stops.size()]; int idx = 0; for (Iterator it = stops.iterator(); it.hasNext();) { Stop stop = (Stop)it.next(); int stopColorVal = stop.color.getRGB(); Color stopColor = new Color((stopColorVal >> 16) & 0xff, (stopColorVal >> 8) & 0xff, stopColorVal & 0xff, clamp((int)(stop.opacity * 255), 0, 255)); stopColors[idx++] = stopColor; } return stopColors; } public void setStops(Color[] colors, float[] fractions) { if (colors.length != fractions.length) { throw new IllegalArgumentException(); } this.stopColors = colors; this.stopFractions = fractions; stopRef = null; } private int clamp(int val, int min, int max) { if (val < min) return min; if (val > max) return max; return val; } public void setStopRef(URI grad) { stopRef = grad; } public void appendStop(Stop stop) { stops.add(stop); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean stateChange = false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; String strn; if (getPres(sty.setName("spreadMethod"))) { int newVal; strn = sty.getStringValue().toLowerCase(); if (strn.equals("repeat")) newVal = SM_REPEAT; else if (strn.equals("reflect")) newVal = SM_REFLECT; else newVal = SM_PAD; if (spreadMethod != newVal) { spreadMethod = newVal; stateChange = true; } } if (getPres(sty.setName("gradientUnits"))) { int newVal; strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) newVal = GU_USER_SPACE_ON_USE; else newVal = GU_OBJECT_BOUNDING_BOX; if (newVal != gradientUnits) { gradientUnits = newVal; stateChange = true; } } if (getPres(sty.setName("gradientTransform"))) { AffineTransform newVal = parseTransform(sty.getStringValue()); if (newVal != null && newVal.equals(gradientTransform)) { gradientTransform = newVal; stateChange = true; } } //Check to see if we're using our own stops or referencing someone else's if (getPres(sty.setName("xlink:href"))) { try { URI newVal = sty.getURIValue(getXMLBase()); if ((newVal == null && stopRef != null) || !newVal.equals(stopRef)) { stopRef = newVal; stateChange = true; } } catch (Exception e) { e.printStackTrace(); } } //Check stops, if any for (Iterator it = stops.iterator(); it.hasNext();) { Stop stop = (Stop)it.next(); if (stop.updateTime(curTime)) { stateChange = true; stopFractions = null; stopColors = null; } } return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/0000755000175000017500000000000011562044256025275 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/CubicSmooth.java0000644000175000017500000000511710627134103030353 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class CubicSmooth extends PathCommand { public float x = 0f; public float y = 0f; public float k2x = 0f; public float k2y = 0f; /** Creates a new instance of MoveTo */ public CubicSmooth() { } public CubicSmooth(boolean isRelative, float k2x, float k2y, float x, float y) { super(isRelative); this.k2x = k2x; this.k2y = k2y; this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; float oldKx = hist.history.length >= 2 ? hist.history[1].x : hist.history[0].x; float oldKy = hist.history.length >= 2 ? hist.history[1].y : hist.history[0].y; float oldX = hist.history[0].x; float oldY = hist.history[0].y; //Calc knot as reflection of old knot float k1x = oldX * 2f - oldKx; float k1y = oldY * 2f - oldKy; path.curveTo(k1x, k1y, k2x + offx, k2y + offy, x + offx, y + offy); hist.setPointAndKnot(x + offx, y + offy, k2x + offx, k2y + offy); } public int getNumKnotsAdded() { return 6; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/BuildHistory.java0000644000175000017500000000371310627134103030555 0ustar moonmoon/* * BuildHistory.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 9:18 PM */ package com.kitfox.svg.pathcmd; import java.awt.geom.Point2D; /** * When building a path from command segments, most need to cache information * (such as the point finished at) for future commands. This structure allows * that * * @author Mark McKay * @author Mark McKay */ public class BuildHistory { // Point2D.Float[] history = new Point2D.Float[2]; Point2D.Float[] history = {new Point2D.Float(), new Point2D.Float()}; int length = 0; /** Creates a new instance of BuildHistory */ public BuildHistory() { } public void setPoint(float x, float y) { history[0].setLocation(x, y); length = 1; } public void setPointAndKnot(float x, float y, float kx, float ky) { history[0].setLocation(x, y); history[1].setLocation(kx, ky); length = 2; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Arc.java0000644000175000017500000002136410627134103026643 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.*; import java.awt.geom.*; /** * This is a little used SVG function, as most editors will save curves as * Beziers. To reduce the need to rely on the Batik library, this functionallity * is being bypassed for the time being. In the future, it would be nice to * extend the GeneralPath command to include the arcTo ability provided by Batik. * * @author Mark McKay * @author Mark McKay */ public class Arc extends PathCommand { public float rx = 0f; public float ry = 0f; public float xAxisRot = 0f; public boolean largeArc = false; public boolean sweep = false; public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public Arc() { } public Arc(boolean isRelative, float rx, float ry, float xAxisRot, boolean largeArc, boolean sweep, float x, float y) { super(isRelative); this.rx = rx; this.ry = ry; this.xAxisRot = xAxisRot; this.largeArc = largeArc; this.sweep = sweep; this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; arcTo(path, rx, ry, xAxisRot, largeArc, sweep, x + offx, y + offy, hist.history[0].x, hist.history[0].y); // path.lineTo(x + offx, y + offy); hist.setPoint(x + offx, y + offy); } public int getNumKnotsAdded() { return 6; } /** * Adds an elliptical arc, defined by two radii, an angle from the * x-axis, a flag to choose the large arc or not, a flag to * indicate if we increase or decrease the angles and the final * point of the arc. * * @param rx the x radius of the ellipse * @param ry the y radius of the ellipse * * @param angle the angle from the x-axis of the current * coordinate system to the x-axis of the ellipse in degrees. * * @param largeArcFlag the large arc flag. If true the arc * spanning less than or equal to 180 degrees is chosen, otherwise * the arc spanning greater than 180 degrees is chosen * * @param sweepFlag the sweep flag. If true the line joining * center to arc sweeps through decreasing angles otherwise it * sweeps through increasing angles * * @param x the absolute x coordinate of the final point of the arc. * @param y the absolute y coordinate of the final point of the arc. * @param x0 - The absolute x coordinate of the initial point of the arc. * @param y0 - The absolute y coordinate of the initial point of the arc. */ public void arcTo(GeneralPath path, float rx, float ry, float angle, boolean largeArcFlag, boolean sweepFlag, float x, float y, float x0, float y0) { // Ensure radii are valid if (rx == 0 || ry == 0) { path.lineTo((float) x, (float) y); return; } if (x0 == x && y0 == y) { // If the endpoints (x, y) and (x0, y0) are identical, then this // is equivalent to omitting the elliptical arc segment entirely. return; } Arc2D arc = computeArc(x0, y0, rx, ry, angle, largeArcFlag, sweepFlag, x, y); if (arc == null) return; AffineTransform t = AffineTransform.getRotateInstance (Math.toRadians(angle), arc.getCenterX(), arc.getCenterY()); Shape s = t.createTransformedShape(arc); path.append(s, true); } /** * This constructs an unrotated Arc2D from the SVG specification of an * Elliptical arc. To get the final arc you need to apply a rotation * transform such as: * * AffineTransform.getRotateInstance * (angle, arc.getX()+arc.getWidth()/2, arc.getY()+arc.getHeight()/2); */ public static Arc2D computeArc(double x0, double y0, double rx, double ry, double angle, boolean largeArcFlag, boolean sweepFlag, double x, double y) { // // Elliptical arc implementation based on the SVG specification notes // // Compute the half distance between the current and the final point double dx2 = (x0 - x) / 2.0; double dy2 = (y0 - y) / 2.0; // Convert angle from degrees to radians angle = Math.toRadians(angle % 360.0); double cosAngle = Math.cos(angle); double sinAngle = Math.sin(angle); // // Step 1 : Compute (x1, y1) // double x1 = (cosAngle * dx2 + sinAngle * dy2); double y1 = (-sinAngle * dx2 + cosAngle * dy2); // Ensure radii are large enough rx = Math.abs(rx); ry = Math.abs(ry); double Prx = rx * rx; double Pry = ry * ry; double Px1 = x1 * x1; double Py1 = y1 * y1; // check that radii are large enough double radiiCheck = Px1/Prx + Py1/Pry; if (radiiCheck > 1) { rx = Math.sqrt(radiiCheck) * rx; ry = Math.sqrt(radiiCheck) * ry; Prx = rx * rx; Pry = ry * ry; } // // Step 2 : Compute (cx1, cy1) // double sign = (largeArcFlag == sweepFlag) ? -1 : 1; double sq = ((Prx*Pry)-(Prx*Py1)-(Pry*Px1)) / ((Prx*Py1)+(Pry*Px1)); sq = (sq < 0) ? 0 : sq; double coef = (sign * Math.sqrt(sq)); double cx1 = coef * ((rx * y1) / ry); double cy1 = coef * -((ry * x1) / rx); // // Step 3 : Compute (cx, cy) from (cx1, cy1) // double sx2 = (x0 + x) / 2.0; double sy2 = (y0 + y) / 2.0; double cx = sx2 + (cosAngle * cx1 - sinAngle * cy1); double cy = sy2 + (sinAngle * cx1 + cosAngle * cy1); // // Step 4 : Compute the angleStart (angle1) and the angleExtent (dangle) // double ux = (x1 - cx1) / rx; double uy = (y1 - cy1) / ry; double vx = (-x1 - cx1) / rx; double vy = (-y1 - cy1) / ry; double p, n; // Compute the angle start n = Math.sqrt((ux * ux) + (uy * uy)); p = ux; // (1 * ux) + (0 * uy) sign = (uy < 0) ? -1d : 1d; double angleStart = Math.toDegrees(sign * Math.acos(p / n)); // Compute the angle extent n = Math.sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy)); p = ux * vx + uy * vy; sign = (ux * vy - uy * vx < 0) ? -1d : 1d; double angleExtent = Math.toDegrees(sign * Math.acos(p / n)); if(!sweepFlag && angleExtent > 0) { angleExtent -= 360f; } else if (sweepFlag && angleExtent < 0) { angleExtent += 360f; } angleExtent %= 360f; angleStart %= 360f; // // We can now build the resulting Arc2D in double precision // Arc2D.Double arc = new Arc2D.Double(); arc.x = cx - rx; arc.y = cy - ry; arc.width = rx * 2.0; arc.height = ry * 2.0; arc.start = -angleStart; arc.extent = -angleExtent; return arc; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Cubic.java0000644000175000017500000000450210627134103027156 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class Cubic extends PathCommand { public float k1x = 0f; public float k1y = 0f; public float k2x = 0f; public float k2y = 0f; public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public Cubic() { } public Cubic(boolean isRelative, float k1x, float k1y, float k2x, float k2y, float x, float y) { super(isRelative); this.k1x = k1x; this.k1y = k1y; this.k2x = k2x; this.k2y = k2y; this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; path.curveTo(k1x + offx, k1y + offy, k2x + offx, k2y + offy, x + offx, y + offy); hist.setPointAndKnot(x + offx, y + offy, k2x + offx, k2y + offy); } public int getNumKnotsAdded() { return 6; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/QuadraticSmooth.java0000644000175000017500000000465210627134103031246 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class QuadraticSmooth extends PathCommand { public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public QuadraticSmooth() { } public QuadraticSmooth(boolean isRelative, float x, float y) { super(isRelative); this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; float oldKx = hist.history.length >= 2 ? hist.history[1].x : hist.history[0].x; float oldKy = hist.history.length >= 2 ? hist.history[1].y : hist.history[0].y; float oldX = hist.history[0].x; float oldY = hist.history[0].y; //Calc knot as reflection of old knot float kx = oldX * 2f - oldKx; float ky = oldY * 2f - oldKy; path.quadTo(kx, ky, x + offx, y + offy); hist.setPointAndKnot(x + offx, y + offy, kx, ky); } public int getNumKnotsAdded() { return 4; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Horizontal.java0000644000175000017500000000366510627134103030273 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class Horizontal extends PathCommand { public float x = 0f; /** Creates a new instance of MoveTo */ public Horizontal() { } public Horizontal(boolean isRelative, float x) { super(isRelative); this.x = x; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = hist.history[0].y; path.lineTo(x + offx, offy); hist.setPoint(x + offx, offy); } public int getNumKnotsAdded() { return 2; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/MoveTo.java0000644000175000017500000000376510627134103027354 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class MoveTo extends PathCommand { public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public MoveTo() { } public MoveTo(boolean isRelative, float x, float y) { super(isRelative); this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; path.moveTo(x + offx, y + offy); hist.setPoint(x + offx, y + offy); } public int getNumKnotsAdded() { return 2; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Vertical.java0000644000175000017500000000365110627134103027706 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class Vertical extends PathCommand { public float y = 0f; /** Creates a new instance of MoveTo */ public Vertical() { } public Vertical(boolean isRelative, float y) { super(isRelative); this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = hist.history[0].x; float offy = isRelative ? hist.history[0].y : 0f; path.lineTo(offx, y + offy); hist.setPoint(offx, y + offy); } public int getNumKnotsAdded() { return 2; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/LineTo.java0000644000175000017500000000377310627134103027334 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class LineTo extends PathCommand { public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public LineTo() { } public LineTo(boolean isRelative, float x, float y) { super(isRelative); this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; path.lineTo(x + offx, y + offy); hist.setPoint(x + offx, y + offy); } public int getNumKnotsAdded() { return 2; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/PathUtil.java0000644000175000017500000000404010627134103027660 0ustar moonmoon/* * PathUtil.java * * Created on May 10, 2005, 5:56 AM * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package com.kitfox.svg.pathcmd; import java.awt.geom.*; /** * * @author kitfox */ public class PathUtil { /** Creates a new instance of PathUtil */ public PathUtil() { } /** * Converts a GeneralPath into an SVG representation */ public static String buildPathString(GeneralPath path) { float[] coords = new float[6]; StringBuffer sb = new StringBuffer(); for (PathIterator pathIt = path.getPathIterator(new AffineTransform()); !pathIt.isDone(); pathIt.next()) { int segId = pathIt.currentSegment(coords); switch (segId) { case PathIterator.SEG_CLOSE: { sb.append(" Z"); break; } case PathIterator.SEG_CUBICTO: { sb.append(" C " + coords[0] + " " + coords[1] + " " + coords[2] + " " + coords[3] + " " + coords[4] + " " + coords[5]); break; } case PathIterator.SEG_LINETO: { sb.append(" L " + coords[0] + " " + coords[1]); break; } case PathIterator.SEG_MOVETO: { sb.append(" M " + coords[0] + " " + coords[1]); break; } case PathIterator.SEG_QUADTO: { sb.append(" Q " + coords[0] + " " + coords[1] + " " + coords[2] + " " + coords[3]); break; } } } return sb.toString(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/PathCommand.java0000644000175000017500000000351710627134103030331 0ustar moonmoon/* * PathCommand.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:39 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * This is the element of a path and contains instructions for rendering a * portion of the path * * @author Mark McKay * @author Mark McKay */ abstract public class PathCommand { public boolean isRelative = false; /** Creates a new instance of PathCommand */ public PathCommand() { } public PathCommand(boolean isRelative) { this.isRelative = isRelative; } // abstract public void appendPath(ExtendedGeneralPath path, BuildHistory hist); abstract public void appendPath(GeneralPath path, BuildHistory hist); abstract public int getNumKnotsAdded(); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Terminal.java0000644000175000017500000000324410627134103027706 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * Finishes a path * * @author Mark McKay * @author Mark McKay */ public class Terminal extends PathCommand { /** Creates a new instance of MoveTo */ public Terminal() { } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { path.closePath(); } public int getNumKnotsAdded() { return 0; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/pathcmd/Quadratic.java0000644000175000017500000000425110627134103030047 0ustar moonmoon/* * MoveTo.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 8:40 PM */ package com.kitfox.svg.pathcmd; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; import java.awt.geom.*; /** * @author Mark McKay * @author Mark McKay */ public class Quadratic extends PathCommand { public float kx = 0f; public float ky = 0f; public float x = 0f; public float y = 0f; /** Creates a new instance of MoveTo */ public Quadratic() { } public Quadratic(boolean isRelative, float kx, float ky, float x, float y) { super(isRelative); this.kx = kx; this.ky = ky; this.x = x; this.y = y; } // public void appendPath(ExtendedGeneralPath path, BuildHistory hist) public void appendPath(GeneralPath path, BuildHistory hist) { float offx = isRelative ? hist.history[0].x : 0f; float offy = isRelative ? hist.history[0].y : 0f; path.quadTo(kx + offx, ky + offy, x + offx, y + offy); hist.setPointAndKnot(x + offx, y + offy, kx + offx, ky + offy); } public int getNumKnotsAdded() { return 4; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/ImageSVG.java0000644000175000017500000002230411452231150026110 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.app.data.Handler; import com.kitfox.svg.xml.*; import java.awt.*; import java.awt.geom.*; import java.awt.image.*; import java.net.*; import java.util.List; /** * Implements an embedded font. * * SVG specification: http://www.w3.org/TR/SVG/fonts.html * * @author Mark McKay * @author Mark McKay */ public class ImageSVG extends RenderableElement { float x = 0f; float y = 0f; float width = 0f; float height = 0f; // BufferedImage href = null; URL imageSrc = null; AffineTransform xform; Rectangle2D bounds; /** Creates a new instance of Font */ public ImageSVG() { } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); if ("data".equals(src.getScheme())) { imageSrc = new URL(null, src.toASCIIString(), new Handler()); } else { try { imageSrc = src.toURL(); } catch (Exception e) { e.printStackTrace(); imageSrc = null; } } } } catch (Exception e) { throw new SVGException(e); } diagram.getUniverse().registerImage(imageSrc); //Set widths if not set BufferedImage img = diagram.getUniverse().getImage(imageSrc); if (img == null) { xform = new AffineTransform(); bounds = new Rectangle2D.Float(); return; } if (width == 0) width = img.getWidth(); if (height == 0) height = img.getHeight(); //Determine image xform xform = new AffineTransform(); // xform.setToScale(this.width / img.getWidth(), this.height / img.getHeight()); // xform.translate(this.x, this.y); xform.translate(this.x, this.y); xform.scale(this.width / img.getWidth(), this.height / img.getHeight()); bounds = new Rectangle2D.Float(this.x, this.y, this.width, this.height); } public float getX() { return x; } public float getY() { return y; } public float getWidth() { return width; } public float getHeight() { return height; } void pick(Point2D point, boolean boundingBox, List retVec) throws SVGException { if (getBoundingBox().contains(point)) { retVec.add(getPath(null)); } } void pick(Rectangle2D pickArea, AffineTransform ltw, boolean boundingBox, List retVec) throws SVGException { if (ltw.createTransformedShape(getBoundingBox()).intersects(pickArea)) { retVec.add(getPath(null)); } } public void render(Graphics2D g) throws SVGException { StyleAttribute styleAttrib = new StyleAttribute(); if (getStyle(styleAttrib.setName("visibility"))) { if (!styleAttrib.getStringValue().equals("visible")) return; } beginLayer(g); float opacity = 1f; if (getStyle(styleAttrib.setName("opacity"))) { opacity = styleAttrib.getRatioValue(); } if (opacity <= 0) return; Composite oldComp = null; if (opacity < 1) { oldComp = g.getComposite(); Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity); g.setComposite(comp); } BufferedImage img = diagram.getUniverse().getImage(imageSrc); if (img == null) return; AffineTransform curXform = g.getTransform(); g.transform(xform); g.drawImage(img, 0, 0, null); g.setTransform(curXform); if (oldComp != null) g.setComposite(oldComp); finishLayer(g); } public Rectangle2D getBoundingBox() { return boundsToParent(bounds); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; shapeChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; shapeChange = true; } } if (getPres(sty.setName("width"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != width) { width = newVal; shapeChange = true; } } if (getPres(sty.setName("height"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != height) { height = newVal; shapeChange = true; } } try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); URL newVal = src.toURL(); if (!newVal.equals(imageSrc)) { imageSrc = newVal; shapeChange = true; } } } catch (IllegalArgumentException ie) { new Exception("Image provided with illegal value for href: \"" + sty.getStringValue() + '"', ie).printStackTrace(); } catch (Exception e) { e.printStackTrace(); } if (shapeChange) { build(); // diagram.getUniverse().registerImage(imageSrc); // // //Set widths if not set // BufferedImage img = diagram.getUniverse().getImage(imageSrc); // if (img == null) // { // xform = new AffineTransform(); // bounds = new Rectangle2D.Float(); // } // else // { // if (width == 0) width = img.getWidth(); // if (height == 0) height = img.getHeight(); // // //Determine image xform // xform = new AffineTransform(); //// xform.setToScale(this.width / img.getWidth(), this.height / img.getHeight()); //// xform.translate(this.x, this.y); // xform.translate(this.x, this.y); // xform.scale(this.width / img.getWidth(), this.height / img.getHeight()); // // bounds = new Rectangle2D.Float(this.x, this.y, this.width, this.height); // } // // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Symbol.java0000644000175000017500000001074211524225604025765 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import java.awt.*; import java.awt.geom.*; import com.kitfox.svg.xml.*; /** * @author Mark McKay * @author Mark McKay */ public class Symbol extends Group { AffineTransform viewXform; Rectangle2D viewBox; /** Creates a new instance of Stop */ public Symbol() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String viewBoxStrn = attrs.getValue("viewBox"); if (viewBoxStrn != null) { float[] dim = XMLParseUtil.parseFloatList(viewBoxStrn); viewBox = new Rectangle2D.Float(dim[0], dim[1], dim[2], dim[3]); } } */ /* public void loaderEndElement(SVGLoaderHelper helper) { if (viewBox == null) { viewBox = super.getBoundingBox(); } //Transform pattern onto unit square viewXform = new AffineTransform(); viewXform.scale(1.0 / viewBox.getWidth(), 1.0 / viewBox.getHeight()); viewXform.translate(-viewBox.getX(), -viewBox.getY()); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); // sty = getPres("unicode"); // if (sty != null) unicode = sty.getStringValue(); if (getPres(sty.setName("viewBox"))) { float[] dim = sty.getFloatList(); viewBox = new Rectangle2D.Float(dim[0], dim[1], dim[2], dim[3]); } if (viewBox == null) { // viewBox = super.getBoundingBox(); viewBox = new Rectangle(0, 0, 1, 1); } //Transform pattern onto unit square viewXform = new AffineTransform(); viewXform.scale(1.0 / viewBox.getWidth(), 1.0 / viewBox.getHeight()); viewXform.translate(-viewBox.getX(), -viewBox.getY()); } protected boolean outsideClip(Graphics2D g) throws SVGException { g.getClipBounds(clipBounds); Rectangle2D rect = super.getBoundingBox(); if (rect.intersects(clipBounds)) { return false; } return true; } public void render(Graphics2D g) throws SVGException { AffineTransform oldXform = g.getTransform(); g.transform(viewXform); super.render(g); g.setTransform(oldXform); } public Shape getShape() { Shape shape = super.getShape(); return viewXform.createTransformedShape(shape); } public Rectangle2D getBoundingBox() throws SVGException { Rectangle2D rect = super.getBoundingBox(); return viewXform.createTransformedShape(rect).getBounds2D(); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //View box properties do not change return changeState; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Hkern.java0000644000175000017500000000331111440556450025564 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; /** * * @author kitfox */ public class Hkern extends SVGElement { String u1; String u2; int k; protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); //Read glyph spacing info if (getPres(sty.setName("u1"))) u1 = sty.getStringValue(); if (getPres(sty.setName("u2"))) u2 = sty.getStringValue(); if (getPres(sty.setName("k"))) k = sty.getIntValue(); } public boolean updateTime(double curTime) throws SVGException { //Fonts can't change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FeDistantLight.java0000644000175000017500000000560310627134103027365 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class FeDistantLight extends FeLight { float azimuth = 0f; float elevation = 0f; /** Creates a new instance of FillElement */ public FeDistantLight() { } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; if (getPres(sty.setName("azimuth"))) azimuth = sty.getFloatValueWithUnits(); if (getPres(sty.setName("elevation"))) elevation = sty.getFloatValueWithUnits(); } public float getAzimuth() { return azimuth; } public float getElevation() { return elevation; } public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("azimuth"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != azimuth) { azimuth = newVal; stateChange = true; } } if (getPres(sty.setName("elevation"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != elevation) { elevation = newVal; stateChange = true; } } return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGElement.java0000644000175000017500000007025711452231150026471 0ustar moonmoon/* * SVGElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:59 AM */ package com.kitfox.svg; import java.util.*; import java.util.regex.*; import java.net.*; import java.awt.geom.*; import org.xml.sax.*; import com.kitfox.svg.animation.*; import com.kitfox.svg.pathcmd.*; import com.kitfox.svg.xml.*; import java.io.Serializable; /** * @author Mark McKay * @author Mark McKay */ abstract public class SVGElement implements Serializable { public static final long serialVersionUID = 0; public static final String SVG_NS = "http://www.w3.org/2000/svg"; protected SVGElement parent = null; protected final ArrayList children = new ArrayList(); protected String id = null; /** * CSS class. Used for applying style sheet information. */ protected String cssClass = null; /** * Styles defined for this elemnt via the style attribute. */ protected final HashMap inlineStyles = new HashMap(); /** * Presentation attributes set for this element. Ie, any attribute other * than the style attribute. */ protected final HashMap presAttribs = new HashMap(); /** * A list of presentation attributes to not include in the presentation * attribute set. */ protected static final Set ignorePresAttrib; static { HashSet set = new HashSet(); // set.add("id"); // set.add("class"); // set.add("style"); // set.add("xml:base"); ignorePresAttrib = Collections.unmodifiableSet(set); } /** * This element may override the URI we resolve against with an * xml:base attribute. If so, a copy is placed here. Otherwise, we defer * to our parent for the reolution base */ protected URI xmlBase = null; /** * The diagram this element belongs to */ protected SVGDiagram diagram; /** * Link to the universe we reside in */ // protected SVGUniverse universe; protected final TrackManager trackManager = new TrackManager(); boolean dirty = true; // public static final Matcher adobeId = Pattern.compile("(.*)_1_").matcher(""); // static final String fpNumRe = "[-+]?((\\d+)|(\\d*\\.\\d+))([-+]?[eE]\\d+)?"; /** Creates a new instance of SVGElement */ public SVGElement() { this(null, null, null); } public SVGElement(String id, SVGElement parent) { this(id, null, parent); } public SVGElement(String id, String cssClass, SVGElement parent) { this.id = id; this.cssClass = cssClass; this.parent = parent; } public SVGElement getParent() { return parent; } void setParent(SVGElement parent) { this.parent = parent; } /** * @return an ordered list of nodes from the root of the tree to this node */ public List getPath(List retVec) { if (retVec == null) retVec = new ArrayList(); if (parent != null) { parent.getPath(retVec); } retVec.add(this); return retVec; } /** * @param retVec - A list to add all children to. If null, a new list is * created and children of this group are added. * * @return The list containing the children of this group */ public List getChildren(List retVec) { if (retVec == null) retVec = new ArrayList(); retVec.addAll(children); return retVec; } /** * @param id - Id of svg element to return * @return the child of the given id, or null if no such child exists. */ public SVGElement getChild(String id) { for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); String eleId = ele.getId(); if (eleId != null && eleId.equals(id)) return ele; } return null; } /** * Searches children for given element. If found, returns index of child. * Otherwise returns -1. */ public int indexOfChild(SVGElement child) { return children.indexOf(child); } /** * Swaps 2 elements in children. * @i index of first * @j index of second * * @return true if successful, false otherwise */ public void swapChildren(int i, int j) throws SVGException { if ((children == null) || (i < 0) || (i >= children.size()) || (j < 0) || (j >= children.size())) { return; } Object temp = children.get(i); children.set(i, children.get(j)); children.set(j, temp); build(); } /** * Called during SAX load process to notify that this tag has begun the process * of being loaded * @param attrs - Attributes of this tag * @param helper - An object passed to all SVG elements involved in this build * process to aid in sharing information. */ public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) throws SAXException { //Set identification info this.parent = parent; this.diagram = helper.diagram; this.id = attrs.getValue("id"); if (this.id != null && !this.id.equals("")) { diagram.setElement(this.id, this); } String className = attrs.getValue("class"); this.cssClass = (className == null || className.equals("")) ? null : className; //docRoot = helper.docRoot; //universe = helper.universe; //Parse style string, if any String style = attrs.getValue("style"); if (style != null) { HashMap map = XMLParseUtil.parseStyle(style, inlineStyles); } String base = attrs.getValue("xml:base"); if (base != null && !base.equals("")) { try { xmlBase = new URI(base); } catch (Exception e) { throw new SAXException(e); } } //Place all other attributes into the presentation attribute list int numAttrs = attrs.getLength(); for (int i = 0; i < numAttrs; i++) { String name = attrs.getQName(i); if (ignorePresAttrib.contains(name)) continue; String value = attrs.getValue(i); presAttribs.put(name, new StyleAttribute(name, value)); } } public void addAttribute(String name, int attribType, String value) throws SVGElementException { if (hasAttribute(name, attribType)) throw new SVGElementException(this, "Attribute " + name + "(" + AnimationElement.animationElementToString(attribType) + ") already exists"); //Alter layout for id attribute if ("id".equals(name) && diagram != null) { diagram.removeElement(this.id); this.id = name; diagram.setElement(this.id, this); } switch (attribType) { case AnimationElement.AT_CSS: inlineStyles.put(name, new StyleAttribute(name, value)); return; case AnimationElement.AT_XML: presAttribs.put(name, new StyleAttribute(name, value)); return; } throw new SVGElementException(this, "Invalid attribute type " + attribType); } public boolean hasAttribute(String name, int attribType) throws SVGElementException { switch (attribType) { case AnimationElement.AT_CSS: return inlineStyles.containsKey(name); case AnimationElement.AT_XML: return presAttribs.containsKey(name); case AnimationElement.AT_AUTO: return inlineStyles.containsKey(name) || presAttribs.containsKey(name); } throw new SVGElementException(this, "Invalid attribute type " + attribType); } /** * @return a set of Strings that corespond to CSS attributes on this element */ public Set getInlineAttributes() { return inlineStyles.keySet(); } /** * @return a set of Strings that corespond to XML attributes on this element */ public Set getPresentationAttributes() { return presAttribs.keySet(); } /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { children.add(child); child.parent = this; child.setDiagram(diagram); //Add info to track if we've scanned animation element if (child instanceof AnimationElement) { trackManager.addTrackElement((AnimationElement)child); } } private void setDiagram(SVGDiagram diagram) { this.diagram = diagram; diagram.setElement(id, this); for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); ele.setDiagram(diagram); } } public void removeChild(SVGElement child) throws SVGElementException { if (!children.contains(child)) { throw new SVGElementException(this, "Element does not contain child " + child); } children.remove(child); } /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { } /** * Called to indicate that this tag and the tags it contains have been completely * processed, and that it should finish any load processes. */ public void loaderEndElement(SVGLoaderHelper helper) throws SVGParseException { try { build(); } catch (SVGException se) { throw new SVGParseException(se); } } /** * Called by internal processes to rebuild the geometry of this node * from it's presentation attributes, style attributes and animated tracks. */ protected void build() throws SVGException { StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("id"))) { String newId = sty.getStringValue(); if (!newId.equals(id)) { diagram.removeElement(id); id = newId; diagram.setElement(this.id, this); } } if (getPres(sty.setName("class"))) cssClass = sty.getStringValue(); if (getPres(sty.setName("xml:base"))) xmlBase = sty.getURIValue(); } public URI getXMLBase() { return xmlBase != null ? xmlBase : (parent != null ? parent.getXMLBase() : diagram.getXMLBase()); } /** * @return the id assigned to this node. Null if no id explicitly set. */ public String getId() { return id; } LinkedList contexts = new LinkedList(); /** * Hack to allow nodes to temporarily change their parents. The Use tag will * need this so it can alter the attributes that a particular node uses. */ protected void pushParentContext(SVGElement context) { contexts.addLast(context); } protected SVGElement popParentContext() { return (SVGElement)contexts.removeLast(); } protected SVGElement getParentContext() { return contexts.isEmpty() ? null : (SVGElement)contexts.getLast(); } /* * Returns the named style attribute. Checks for inline styles first, then * internal and extranal style sheets, and finally checks for presentation * attributes. * @param styleName - Name of attribute to return * @param recursive - If true and this object does not contain the * named style attribute, checks attributes of parents abck to root until * one found. */ public boolean getStyle(StyleAttribute attrib) throws SVGException { return getStyle(attrib, true); } public void setAttribute(String name, int attribType, String value) throws SVGElementException { StyleAttribute styAttr; switch (attribType) { case AnimationElement.AT_CSS: { styAttr = (StyleAttribute)inlineStyles.get(name); break; } case AnimationElement.AT_XML: { styAttr = (StyleAttribute)presAttribs.get(name); break; } case AnimationElement.AT_AUTO: { styAttr = (StyleAttribute)inlineStyles.get(name); if (styAttr == null) { styAttr = (StyleAttribute)presAttribs.get(name); } break; } default: throw new SVGElementException(this, "Invalid attribute type " + attribType); } if (styAttr == null) { throw new SVGElementException(this, "Could not find attribute " + name + "(" + AnimationElement.animationElementToString(attribType) + "). Make sure to create attribute before setting it."); } //Alter layout for relevant attributes if ("id".equals(styAttr.getName())) { diagram.removeElement(this.id); this.id = name; diagram.setElement(this.id, this); } styAttr.setStringValue(value); } /** * Copies the current style into the passed style attribute. Checks for * inline styles first, then internal and extranal style sheets, and * finally checks for presentation attributes. Recursively checks parents. * @param attrib - Attribute to write style data to. Must have it's name * set to the name of the style being queried. * @param recursive - If true and this object does not contain the * named style attribute, checks attributes of parents abck to root until * one found. */ public boolean getStyle(StyleAttribute attrib, boolean recursive) throws SVGException { String styName = attrib.getName(); //Check for local inline styles StyleAttribute styAttr = (StyleAttribute)inlineStyles.get(styName); attrib.setStringValue(styAttr == null ? "" : styAttr.getStringValue()); //Evalutate coresponding track, if one exists TrackBase track = trackManager.getTrack(styName, AnimationElement.AT_CSS); if (track != null) { track.getValue(attrib, diagram.getUniverse().getCurTime()); return true; } //Return if we've found a non animated style if (styAttr != null) return true; //Implement style sheet lookup later //Check for presentation attribute StyleAttribute presAttr = (StyleAttribute)presAttribs.get(styName); attrib.setStringValue(presAttr == null ? "" : presAttr.getStringValue()); //Evalutate coresponding track, if one exists track = trackManager.getTrack(styName, AnimationElement.AT_XML); if (track != null) { track.getValue(attrib, diagram.getUniverse().getCurTime()); return true; } //Return if we've found a presentation attribute instead if (presAttr != null) return true; //If we're recursive, check parents if (recursive) { SVGElement parentContext = getParentContext(); if (parentContext != null) return parentContext.getStyle(attrib, true); if (parent != null) return parent.getStyle(attrib, true); } //Unsuccessful reading style attribute return false; } /** * @return the raw style value of this attribute. Does not take the * presentation value or animation into consideration. Used by animations * to determine the base to animate from. */ public StyleAttribute getStyleAbsolute(String styName) { //Check for local inline styles return (StyleAttribute)inlineStyles.get(styName); } /** * Copies the presentation attribute into the passed one. * @return - True if attribute was read successfully */ public boolean getPres(StyleAttribute attrib) throws SVGException { String presName = attrib.getName(); //Make sure we have a coresponding presentation attribute StyleAttribute presAttr = (StyleAttribute)presAttribs.get(presName); //Copy presentation value directly attrib.setStringValue(presAttr == null ? "" : presAttr.getStringValue()); //Evalutate coresponding track, if one exists TrackBase track = trackManager.getTrack(presName, AnimationElement.AT_XML); if (track != null) { track.getValue(attrib, diagram.getUniverse().getCurTime()); return true; } //Return if we found presentation attribute if (presAttr != null) return true; return false; } /** * @return the raw presentation value of this attribute. Ignores any * modifications applied by style attributes or animation. Used by * animations to determine the starting point to animate from */ public StyleAttribute getPresAbsolute(String styName) { //Check for local inline styles return (StyleAttribute)presAttribs.get(styName); } static protected AffineTransform parseTransform(String val) throws SVGException { final Matcher matchExpression = Pattern.compile("\\w+\\([^)]*\\)").matcher(""); AffineTransform retXform = new AffineTransform(); matchExpression.reset(val); while (matchExpression.find()) { retXform.concatenate(parseSingleTransform(matchExpression.group())); } return retXform; } static public AffineTransform parseSingleTransform(String val) throws SVGException { final Matcher matchWord = Pattern.compile("[-.\\w]+").matcher(""); AffineTransform retXform = new AffineTransform(); matchWord.reset(val); if (!matchWord.find()) { //Return identity transformation if no data present (eg, empty string) return retXform; } String function = matchWord.group().toLowerCase(); LinkedList termList = new LinkedList(); while (matchWord.find()) { termList.add(matchWord.group()); } double[] terms = new double[termList.size()]; Iterator it = termList.iterator(); int count = 0; while (it.hasNext()) { terms[count++] = XMLParseUtil.parseDouble((String)it.next()); } //Calculate transformation if (function.equals("matrix")) { retXform.setTransform(terms[0], terms[1], terms[2], terms[3], terms[4], terms[5]); } else if (function.equals("translate")) { retXform.setToTranslation(terms[0], terms[1]); } else if (function.equals("scale")) { if (terms.length > 1) retXform.setToScale(terms[0], terms[1]); else retXform.setToScale(terms[0], terms[0]); } else if (function.equals("rotate")) { if (terms.length > 2) retXform.setToRotation(Math.toRadians(terms[0]), terms[1], terms[2]); else retXform.setToRotation(Math.toRadians(terms[0])); } else if (function.equals("skewx")) { retXform.setToShear(Math.toRadians(terms[0]), 0.0); } else if (function.equals("skewy")) { retXform.setToShear(0.0, Math.toRadians(terms[0])); } else { throw new SVGException("Unknown transform type"); } return retXform; } static protected float nextFloat(LinkedList l) { String s = (String)l.removeFirst(); return Float.parseFloat(s); } static protected PathCommand[] parsePathList(String list) { final Matcher matchPathCmd = Pattern.compile("([MmLlHhVvAaQqTtCcSsZz])|([-+]?((\\d*\\.\\d+)|(\\d+))([eE][-+]?\\d+)?)").matcher(list); //Tokenize LinkedList tokens = new LinkedList(); while (matchPathCmd.find()) { tokens.addLast(matchPathCmd.group()); } boolean defaultRelative = false; LinkedList cmdList = new LinkedList(); char curCmd = 'Z'; while (tokens.size() != 0) { String curToken = (String)tokens.removeFirst(); char initChar = curToken.charAt(0); if ((initChar >= 'A' && initChar <='Z') || (initChar >= 'a' && initChar <='z')) { curCmd = initChar; } else { tokens.addFirst(curToken); } PathCommand cmd = null; switch (curCmd) { case 'M': cmd = new MoveTo(false, nextFloat(tokens), nextFloat(tokens)); curCmd = 'L'; break; case 'm': cmd = new MoveTo(true, nextFloat(tokens), nextFloat(tokens)); curCmd = 'l'; break; case 'L': cmd = new LineTo(false, nextFloat(tokens), nextFloat(tokens)); break; case 'l': cmd = new LineTo(true, nextFloat(tokens), nextFloat(tokens)); break; case 'H': cmd = new Horizontal(false, nextFloat(tokens)); break; case 'h': cmd = new Horizontal(true, nextFloat(tokens)); break; case 'V': cmd = new Vertical(false, nextFloat(tokens)); break; case 'v': cmd = new Vertical(true, nextFloat(tokens)); break; case 'A': cmd = new Arc(false, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens) == 1f, nextFloat(tokens) == 1f, nextFloat(tokens), nextFloat(tokens)); break; case 'a': cmd = new Arc(true, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens) == 1f, nextFloat(tokens) == 1f, nextFloat(tokens), nextFloat(tokens)); break; case 'Q': cmd = new Quadratic(false, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 'q': cmd = new Quadratic(true, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 'T': cmd = new QuadraticSmooth(false, nextFloat(tokens), nextFloat(tokens)); break; case 't': cmd = new QuadraticSmooth(true, nextFloat(tokens), nextFloat(tokens)); break; case 'C': cmd = new Cubic(false, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 'c': cmd = new Cubic(true, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 'S': cmd = new CubicSmooth(false, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 's': cmd = new CubicSmooth(true, nextFloat(tokens), nextFloat(tokens), nextFloat(tokens), nextFloat(tokens)); break; case 'Z': case 'z': cmd = new Terminal(); break; default: throw new RuntimeException("Invalid path element"); } cmdList.add(cmd); defaultRelative = cmd.isRelative; } PathCommand[] retArr = new PathCommand[cmdList.size()]; cmdList.toArray(retArr); return retArr; } static protected GeneralPath buildPath(String text, int windingRule) { PathCommand[] commands = parsePathList(text); int numKnots = 2; for (int i = 0; i < commands.length; i++) { numKnots += commands[i].getNumKnotsAdded(); } GeneralPath path = new GeneralPath(windingRule, numKnots); BuildHistory hist = new BuildHistory(); for (int i = 0; i < commands.length; i++) { PathCommand cmd = commands[i]; cmd.appendPath(path, hist); } return path; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ abstract public boolean updateTime(double curTime) throws SVGException; public int getNumChildren() { return children.size(); } public SVGElement getChild(int i) { return (SVGElement)children.get(i); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/TransformableElement.java0000644000175000017500000000656111440556450030640 0ustar moonmoon/* * BoundedElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 9:00 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; /** * Maintains bounding box for this element * * @author Mark McKay * @author Mark McKay */ public class TransformableElement extends SVGElement { AffineTransform xform = null; // AffineTransform invXform = null; /** Creates a new instance of BoundedElement */ public TransformableElement() { } public TransformableElement(String id, SVGElement parent) { super(id, parent); } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String transform = attrs.getValue("transform"); if (transform != null) { xform = parseTransform(transform); } } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("transform"))) { xform = parseTransform(sty.getStringValue()); } } protected Shape shapeToParent(Shape shape) { if (xform == null) return shape; return xform.createTransformedShape(shape); } protected Rectangle2D boundsToParent(Rectangle2D rect) { if (xform == null) return rect; return xform.createTransformedShape(rect).getBounds2D(); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("transform"))) { AffineTransform newXform = parseTransform(sty.getStringValue()); if (!newXform.equals(xform)) { xform = newXform; return true; } } return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/RadialGradient.java0000644000175000017500000001541610627134103027371 0ustar moonmoon/* * RadialGradient.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:55 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.*; import java.awt.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; //import org.apache.batik.ext.awt.*; import com.kitfox.svg.batik.*; /** * @author Mark McKay * @author Mark McKay */ public class RadialGradient extends Gradient { float cx = 0.5f; float cy = 0.5f; float fx = 0.5f; float fy = 0.5f; float r = 0.5f; /** Creates a new instance of RadialGradient */ public RadialGradient() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String cx = attrs.getValue("cx"); String cy = attrs.getValue("cy"); String fx = attrs.getValue("fx"); String fy = attrs.getValue("fy"); String r = attrs.getValue("r"); if (cx != null) this.cx = (float)XMLParseUtil.parseRatio(cx); if (cy != null) this.cy = (float)XMLParseUtil.parseRatio(cy); if (fx != null) this.fx = (float)XMLParseUtil.parseRatio(fx); if (fy != null) this.fy = (float)XMLParseUtil.parseRatio(fy); if (r != null) this.r = (float)XMLParseUtil.parseRatio(r); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { super.loaderEndElement(helper); build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("cx"))) cx = sty.getFloatValueWithUnits(); if (getPres(sty.setName("cy"))) cy = sty.getFloatValueWithUnits(); if (getPres(sty.setName("fx"))) fx = sty.getFloatValueWithUnits(); if (getPres(sty.setName("fy"))) fy = sty.getFloatValueWithUnits(); if (getPres(sty.setName("r"))) r = sty.getFloatValueWithUnits(); } public Paint getPaint(Rectangle2D bounds, AffineTransform xform) { com.kitfox.svg.batik.MultipleGradientPaint.CycleMethodEnum method; switch (spreadMethod) { default: case SM_PAD: method = com.kitfox.svg.batik.MultipleGradientPaint.NO_CYCLE; break; case SM_REPEAT: method = com.kitfox.svg.batik.MultipleGradientPaint.REPEAT; break; case SM_REFLECT: method = com.kitfox.svg.batik.MultipleGradientPaint.REFLECT; break; } com.kitfox.svg.batik.RadialGradientPaint paint; if (gradientUnits == GU_USER_SPACE_ON_USE) { paint = new com.kitfox.svg.batik.RadialGradientPaint( new Point2D.Float(cx, cy), r, new Point2D.Float(fx, fy), getStopFractions(), getStopColors(), method, com.kitfox.svg.batik.MultipleGradientPaint.SRGB, gradientTransform); } else { AffineTransform viewXform = new AffineTransform(); viewXform.translate(bounds.getX(), bounds.getY()); viewXform.scale(bounds.getWidth(), bounds.getHeight()); viewXform.concatenate(gradientTransform); paint = new com.kitfox.svg.batik.RadialGradientPaint( new Point2D.Float(cx, cy), r, new Point2D.Float(fx, fy), getStopFractions(), getStopColors(), method, com.kitfox.svg.batik.MultipleGradientPaint.SRGB, viewXform); } return paint; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("cx"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != cx) { cx = newVal; shapeChange = true; } } if (getPres(sty.setName("cy"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != cy) { cy = newVal; shapeChange = true; } } if (getPres(sty.setName("fx"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != fx) { fx = newVal; shapeChange = true; } } if (getPres(sty.setName("fy"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != fy) { fy = newVal; shapeChange = true; } } if (getPres(sty.setName("r"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != r) { r = newVal; shapeChange = true; } } return changeState; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/ShapeElement.java0000644000175000017500000003021411524225604027066 0ustar moonmoon/* * ShapeElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:21 PM */ package com.kitfox.svg; import com.kitfox.svg.Marker.MarkerLayout; import com.kitfox.svg.Marker.MarkerPos; import com.kitfox.svg.xml.StyleAttribute; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.net.URI; import java.util.ArrayList; import java.util.List; /** * Parent of shape objects * * @author Mark McKay * @author Mark McKay */ abstract public class ShapeElement extends RenderableElement { /** * This is necessary to get text elements to render the stroke the correct * width. It is an alternative to producing new font glyph sets at different * sizes. */ protected float strokeWidthScalar = 1f; /** Creates a new instance of ShapeElement */ public ShapeElement() { } abstract public void render(java.awt.Graphics2D g) throws SVGException; /* protected void setStrokeWidthScalar(float strokeWidthScalar) { this.strokeWidthScalar = strokeWidthScalar; } */ void pick(Point2D point, boolean boundingBox, List retVec) throws SVGException { StyleAttribute styleAttrib = new StyleAttribute(); // if (getStyle(styleAttrib.setName("fill")) && getShape().contains(point)) if ((boundingBox ? getBoundingBox() : getShape()).contains(point)) { retVec.add(getPath(null)); } } void pick(Rectangle2D pickArea, AffineTransform ltw, boolean boundingBox, List retVec) throws SVGException { StyleAttribute styleAttrib = new StyleAttribute(); // if (getStyle(styleAttrib.setName("fill")) && getShape().contains(point)) if (ltw.createTransformedShape((boundingBox ? getBoundingBox() : getShape())).intersects(pickArea)) { retVec.add(getPath(null)); } } protected void renderShape(Graphics2D g, Shape shape) throws SVGException { //g.setColor(Color.green); StyleAttribute styleAttrib = new StyleAttribute(); //Don't process if not visible if (getStyle(styleAttrib.setName("visibility"))) { if (!styleAttrib.getStringValue().equals("visible")) return; } if (getStyle(styleAttrib.setName("display"))) { if (styleAttrib.getStringValue().equals("none")) return; } //None, solid color, gradient, pattern Paint fillPaint = Color.black; //Default to black. Must be explicitly set to none for no fill. if (getStyle(styleAttrib.setName("fill"))) { if (styleAttrib.getStringValue().equals("none")) fillPaint = null; else { fillPaint = styleAttrib.getColorValue(); if (fillPaint == null) { URI uri = styleAttrib.getURIValue(getXMLBase()); if (uri != null) { Rectangle2D bounds = shape.getBounds2D(); AffineTransform xform = g.getTransform(); SVGElement ele = diagram.getUniverse().getElement(uri); fillPaint = ((FillElement)ele).getPaint(bounds, xform); } } } } //Default opacity float opacity = 1f; if (getStyle(styleAttrib.setName("opacity"))) { opacity = styleAttrib.getRatioValue(); } float fillOpacity = opacity; if (getStyle(styleAttrib.setName("fill-opacity"))) { fillOpacity *= styleAttrib.getRatioValue(); } Paint strokePaint = null; //Default is to stroke with none if (getStyle(styleAttrib.setName("stroke"))) { if (styleAttrib.getStringValue().equals("none")) strokePaint = null; else { strokePaint = styleAttrib.getColorValue(); if (strokePaint == null) { URI uri = styleAttrib.getURIValue(getXMLBase()); if (uri != null) { Rectangle2D bounds = shape.getBounds2D(); AffineTransform xform = g.getTransform(); SVGElement ele = diagram.getUniverse().getElement(uri); strokePaint = ((FillElement)ele).getPaint(bounds, xform); } } } } float[] strokeDashArray = null; if (getStyle(styleAttrib.setName("stroke-dasharray"))) { strokeDashArray = styleAttrib.getFloatList(); if (strokeDashArray.length == 0) strokeDashArray = null; } float strokeDashOffset = 0f; if (getStyle(styleAttrib.setName("stroke-dashoffset"))) { strokeDashOffset = styleAttrib.getFloatValueWithUnits(); } int strokeLinecap = BasicStroke.CAP_BUTT; if (getStyle(styleAttrib.setName("stroke-linecap"))) { String val = styleAttrib.getStringValue(); if (val.equals("round")) { strokeLinecap = BasicStroke.CAP_ROUND; } else if (val.equals("square")) { strokeLinecap = BasicStroke.CAP_SQUARE; } } int strokeLinejoin = BasicStroke.JOIN_MITER; if (getStyle(styleAttrib.setName("stroke-linejoin"))) { String val = styleAttrib.getStringValue(); if (val.equals("round")) { strokeLinejoin = BasicStroke.JOIN_ROUND; } else if (val.equals("bevel")) { strokeLinejoin = BasicStroke.JOIN_BEVEL; } } float strokeMiterLimit = 4f; if (getStyle(styleAttrib.setName("stroke-miterlimit"))) { strokeMiterLimit = Math.max(styleAttrib.getFloatValueWithUnits(), 1); } float strokeOpacity = opacity; if (getStyle(styleAttrib.setName("stroke-opacity"))) { strokeOpacity *= styleAttrib.getRatioValue(); } float strokeWidth = 1f; if (getStyle(styleAttrib.setName("stroke-width"))) { strokeWidth = styleAttrib.getFloatValueWithUnits(); } // if (strokeWidthScalar != 1f) // { strokeWidth *= strokeWidthScalar; // } Marker markerStart = null; if (getStyle(styleAttrib.setName("marker-start"))) { URI uri = styleAttrib.getURIValue(getXMLBase()); markerStart = (Marker)diagram.getUniverse().getElement(uri); } Marker markerMid = null; if (getStyle(styleAttrib.setName("marker-mid"))) { URI uri = styleAttrib.getURIValue(getXMLBase()); markerMid = (Marker)diagram.getUniverse().getElement(uri); } Marker markerEnd = null; if (getStyle(styleAttrib.setName("marker-end"))) { URI uri = styleAttrib.getURIValue(getXMLBase()); markerEnd = (Marker)diagram.getUniverse().getElement(uri); } //Draw the shape if (fillPaint != null && fillOpacity != 0f) { if (fillOpacity <= 0) { //Do nothing } else if (fillOpacity < 1f) { Composite cachedComposite = g.getComposite(); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, fillOpacity)); g.setPaint(fillPaint); g.fill(shape); g.setComposite(cachedComposite); } else { g.setPaint(fillPaint); g.fill(shape); } } if (strokePaint != null && strokeOpacity != 0f) { BasicStroke stroke; if (strokeDashArray == null) { stroke = new BasicStroke(strokeWidth, strokeLinecap, strokeLinejoin, strokeMiterLimit); } else { stroke = new BasicStroke(strokeWidth, strokeLinecap, strokeLinejoin, strokeMiterLimit, strokeDashArray, strokeDashOffset); } Shape strokeShape = stroke.createStrokedShape(shape); if (strokeOpacity <= 0) { //Do nothing } else if (strokeOpacity < 1f) { Composite cachedComposite = g.getComposite(); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, strokeOpacity)); g.setPaint(strokePaint); g.fill(strokeShape); g.setComposite(cachedComposite); } else { g.setPaint(strokePaint); g.fill(strokeShape); } } if (markerStart != null || markerMid != null || markerEnd != null) { MarkerLayout layout = new MarkerLayout(); layout.layout(shape); ArrayList list = layout.getMarkerList(); for (int i = 0; i < list.size(); ++i) { MarkerPos pos = (MarkerPos)list.get(i); switch (pos.type) { case Marker.MARKER_START: if (markerStart != null) { markerStart.render(g, pos, strokeWidth); } break; case Marker.MARKER_MID: if (markerMid != null) { markerMid.render(g, pos, strokeWidth); } break; case Marker.MARKER_END: if (markerEnd != null) { markerEnd.render(g, pos, strokeWidth); } break; } } } } abstract public Shape getShape(); protected Rectangle2D includeStrokeInBounds(Rectangle2D rect) throws SVGException { StyleAttribute styleAttrib = new StyleAttribute(); if (!getStyle(styleAttrib.setName("stroke"))) return rect; double strokeWidth = 1; if (getStyle(styleAttrib.setName("stroke-width"))) strokeWidth = styleAttrib.getDoubleValue(); rect.setRect( rect.getX() - strokeWidth / 2, rect.getY() - strokeWidth / 2, rect.getWidth() + strokeWidth, rect.getHeight() + strokeWidth); return rect; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/RenderableElement.java0000644000175000017500000001211611345751075030101 0ustar moonmoon/* * BoundedElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 9:00 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.net.URI; import java.util.List; /** * Maintains bounding box for this element * * @author Mark McKay * @author Mark McKay */ abstract public class RenderableElement extends TransformableElement { AffineTransform cachedXform = null; Shape cachedClip = null; public static final int VECTOR_EFFECT_NONE = 0; public static final int VECTOR_EFFECT_NON_SCALING_STROKE = 1; int vectorEffect; /** Creates a new instance of BoundedElement */ public RenderableElement() { } public RenderableElement(String id, SVGElement parent) { super(id, parent); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("vector-effect"))) { if ("non-scaling-stroke".equals(sty.getStringValue())) { vectorEffect = VECTOR_EFFECT_NON_SCALING_STROKE; } else { vectorEffect = VECTOR_EFFECT_NONE; } } else { vectorEffect = VECTOR_EFFECT_NONE; } } abstract public void render(Graphics2D g) throws SVGException; abstract void pick(Point2D point, boolean boundingBox, List retVec) throws SVGException; abstract void pick(Rectangle2D pickArea, AffineTransform ltw, boolean boundingBox, List retVec) throws SVGException; abstract public Rectangle2D getBoundingBox() throws SVGException; /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { super.loaderStartElement(helper, attrs, parent); } */ /** * Pushes transform stack, transforms to local coordinates and sets up * clipping mask. */ protected void beginLayer(Graphics2D g) throws SVGException { if (xform != null) { cachedXform = g.getTransform(); g.transform(xform); } StyleAttribute styleAttrib = new StyleAttribute(); //Get clipping path // StyleAttribute styleAttrib = getStyle("clip-path", false); Shape clipPath = null; int clipPathUnits = ClipPath.CP_USER_SPACE_ON_USE; if (getStyle(styleAttrib.setName("clip-path"))) { URI uri = styleAttrib.getURIValue(getXMLBase()); if (uri != null) { ClipPath ele = (ClipPath)diagram.getUniverse().getElement(uri); clipPath = ele.getClipPathShape(); clipPathUnits = ele.getClipPathUnits(); } } //Return if we're out of clipping range if (clipPath != null) { if (clipPathUnits == ClipPath.CP_OBJECT_BOUNDING_BOX && (this instanceof ShapeElement)) { Rectangle2D rect = ((ShapeElement)this).getBoundingBox(); AffineTransform at = new AffineTransform(); at.scale(rect.getWidth(), rect.getHeight()); clipPath = at.createTransformedShape(clipPath); } cachedClip = g.getClip(); Area newClip = new Area(cachedClip); newClip.intersect(new Area(clipPath)); g.setClip(newClip); } } /** * Restores transform and clipping values to the way they were before * this layer was drawn. */ protected void finishLayer(Graphics2D g) { if (cachedClip != null) { g.setClip(cachedClip); } if (cachedXform != null) { g.setTransform(cachedXform); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/MissingGlyph.java0000644000175000017500000001735411345751075027152 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.*; import java.awt.*; import java.awt.geom.*; import java.util.*; import com.kitfox.svg.pathcmd.*; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; /** * Implements an embedded font. * * SVG specification: http://www.w3.org/TR/SVG/fonts.html * * @author Mark McKay * @author Mark McKay */ public class MissingGlyph extends ShapeElement { //We may define a path // ExtendedGeneralPath path = null; Shape path = null; //Alternately, we may have child graphical elements int horizAdvX = -1; //Inherits font's value if not set int vertOriginX = -1; //Inherits font's value if not set int vertOriginY = -1; //Inherits font's value if not set int vertAdvY = -1; //Inherits font's value if not set /** Creates a new instance of Font */ public MissingGlyph() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); //If glyph path was specified, calculate it String commandList = attrs.getValue("d"); if (commandList != null) { StyleAttribute atyleAttrib = getStyle("fill-rule"); String fillRule = (atyleAttrib == null) ? "nonzero" : atyleAttrib.getStringValue(); PathCommand[] commands = parsePathList(commandList); // ExtendedGeneralPath buildPath = new ExtendedGeneralPath( GeneralPath buildPath = new GeneralPath( fillRule.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO, commands.length); BuildHistory hist = new BuildHistory(); for (int i = 0; i < commands.length; i++) { PathCommand cmd = commands[i]; cmd.appendPath(buildPath, hist); } //Reflect glyph path to put it in user coordinate system AffineTransform at = new AffineTransform(); at.scale(1, -1); path = at.createTransformedShape(buildPath); } //Read glyph spacing info String horizAdvX = attrs.getValue("horiz-adv-x"); String vertOriginX = attrs.getValue("vert-origin-x"); String vertOriginY = attrs.getValue("vert-origin-y"); String vertAdvY = attrs.getValue("vert-adv-y"); if (horizAdvX != null) this.horizAdvX = XMLParseUtil.parseInt(horizAdvX); if (vertOriginX != null) this.vertOriginX = XMLParseUtil.parseInt(vertOriginX); if (vertOriginY != null) this.vertOriginY = XMLParseUtil.parseInt(vertOriginY); if (vertAdvY != null) this.vertAdvY = XMLParseUtil.parseInt(vertAdvY); } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String commandList = ""; if (getPres(sty.setName("d"))) commandList = sty.getStringValue(); //If glyph path was specified, calculate it if (commandList != null) { // StyleAttribute atyleAttrib = getStyle("fill-rule"); String fillRule = getStyle(sty.setName("fill-rule")) ? sty.getStringValue() : "nonzero"; PathCommand[] commands = parsePathList(commandList); // ExtendedGeneralPath buildPath = new ExtendedGeneralPath( GeneralPath buildPath = new GeneralPath( fillRule.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO, commands.length); BuildHistory hist = new BuildHistory(); for (int i = 0; i < commands.length; i++) { PathCommand cmd = commands[i]; cmd.appendPath(buildPath, hist); } //Reflect glyph path to put it in user coordinate system AffineTransform at = new AffineTransform(); at.scale(1, -1); path = at.createTransformedShape(buildPath); } //Read glyph spacing info if (getPres(sty.setName("horiz-adv-x"))) horizAdvX = sty.getIntValue(); if (getPres(sty.setName("vert-origin-x"))) vertOriginX = sty.getIntValue(); if (getPres(sty.setName("vert-origin-y"))) vertOriginY = sty.getIntValue(); if (getPres(sty.setName("vert-adv-y"))) vertAdvY = sty.getIntValue(); } public Shape getPath() { return path; } public void render(Graphics2D g) throws SVGException { //Do not push or pop stack if (path != null) renderShape(g, path); Iterator it = children.iterator(); while (it.hasNext()) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { ((RenderableElement)ele).render(g); } } //Do not push or pop stack } public int getHorizAdvX() { if (horizAdvX == -1) horizAdvX = ((Font)parent).getHorizAdvX(); return horizAdvX; } public int getVertOriginX() { if (vertOriginX == -1) vertOriginX = getHorizAdvX() / 2; return vertOriginX; } public int getVertOriginY() { if (vertOriginY == -1) vertOriginY = ((Font)parent).getFontFace().getAscent(); return vertOriginY; } public int getVertAdvY() { if (vertAdvY == -1) vertAdvY = ((Font)parent).getFontFace().getUnitsPerEm(); return vertAdvY; } public Shape getShape() { if (path != null) return shapeToParent(path); return null; } public Rectangle2D getBoundingBox() throws SVGException { if (path != null) return boundsToParent(includeStrokeInBounds(path.getBounds2D())); return null; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Fonts can't change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Metadata.java0000644000175000017500000000272110627134103026232 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 19, 2004, 1:56 AM */ package com.kitfox.svg; /** * Does not hold any information. Included to allow metadata tag to be parsed. * * @author Mark McKay * @author Mark McKay */ public class Metadata extends SVGElement { /** Creates a new instance of Stop */ public Metadata() { } public boolean updateTime(double curTime) { return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/A.java0000644000175000017500000000570510637417427024715 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.net.URI; /** * @author Mark McKay * @author Mark McKay */ public class A extends Group { URI href; String title; /** Creates a new instance of Stop */ public A() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String offset = attrs.getValue("offset"); this.offset = (float)XMLParseUtil.parseRatio(offset); buildStop(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("xlink:href"))) { href = sty.getURIValue(getXMLBase()); } if (getPres(sty.setName("xlink:title"))) { title = sty.getStringValue(); } } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { boolean changeState = super.updateTime(curTime); // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("xlink:href"))) { href = sty.getURIValue(getXMLBase()); } if (getPres(sty.setName("xlink:title"))) { title = sty.getStringValue(); } return changeState; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGUniverse.java0000644000175000017500000005224211427227157026710 0ustar moonmoon/* * SVGUniverse.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 11:43 PM */ package com.kitfox.svg; import com.kitfox.svg.app.beans.SVGIcon; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Reader; import java.io.Serializable; import java.lang.ref.SoftReference; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; import java.util.HashMap; import java.util.Iterator; import java.util.zip.GZIPInputStream; import javax.imageio.ImageIO; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; /** * Many SVG files can be loaded at one time. These files will quite likely * need to reference one another. The SVG universe provides a container for * all these files and the means for them to relate to each other. * * @author Mark McKay * @author Mark McKay */ public class SVGUniverse implements Serializable { public static final long serialVersionUID = 0; transient private PropertyChangeSupport changes = new PropertyChangeSupport(this); /** * Maps document URIs to their loaded SVG diagrams. Note that URIs for * documents loaded from URLs will reflect their URLs and URIs for documents * initiated from streams will have the scheme svgSalamander. */ final HashMap loadedDocs = new HashMap(); final HashMap loadedFonts = new HashMap(); final HashMap loadedImages = new HashMap(); public static final String INPUTSTREAM_SCHEME = "svgSalamander"; /** * Current time in this universe. Used for resolving attributes that * are influenced by track information. Time is in milliseconds. Time * 0 coresponds to the time of 0 in each member diagram. */ protected double curTime = 0.0; private boolean verbose = false; //Cache reader for efficiency XMLReader cachedReader; /** Creates a new instance of SVGUniverse */ public SVGUniverse() { } public void addPropertyChangeListener(PropertyChangeListener l) { changes.addPropertyChangeListener(l); } public void removePropertyChangeListener(PropertyChangeListener l) { changes.removePropertyChangeListener(l); } /** * Release all loaded SVG document from memory */ public void clear() { loadedDocs.clear(); loadedFonts.clear(); loadedImages.clear(); } /** * Returns the current animation time in milliseconds. */ public double getCurTime() { return curTime; } public void setCurTime(double curTime) { double oldTime = this.curTime; this.curTime = curTime; changes.firePropertyChange("curTime", new Double(oldTime), new Double(curTime)); } /** * Updates all time influenced style and presentation attributes in all SVG * documents in this universe. */ public void updateTime() throws SVGException { for (Iterator it = loadedDocs.values().iterator(); it.hasNext();) { SVGDiagram dia = (SVGDiagram)it.next(); dia.updateTime(curTime); } } /** * Called by the Font element to let the universe know that a font has been * loaded and is available. */ void registerFont(Font font) { loadedFonts.put(font.getFontFace().getFontFamily(), font); } public Font getDefaultFont() { for (Iterator it = loadedFonts.values().iterator(); it.hasNext();) { return (Font)it.next(); } return null; } public Font getFont(String fontName) { return (Font)loadedFonts.get(fontName); } URL registerImage(URI imageURI) { String scheme = imageURI.getScheme(); if (scheme.equals("data")) { String path = imageURI.getRawSchemeSpecificPart(); int idx = path.indexOf(';'); String mime = path.substring(0, idx); String content = path.substring(idx + 1); if (content.startsWith("base64")) { content = content.substring(6); try { byte[] buf = new sun.misc.BASE64Decoder().decodeBuffer(content); ByteArrayInputStream bais = new ByteArrayInputStream(buf); BufferedImage img = ImageIO.read(bais); URL url; int urlIdx = 0; while (true) { url = new URL("inlineImage", "localhost", "img" + urlIdx); if (!loadedImages.containsKey(url)) { break; } urlIdx++; } SoftReference ref = new SoftReference(img); loadedImages.put(url, ref); return url; } catch (IOException ex) { ex.printStackTrace(); } } return null; } else { try { URL url = imageURI.toURL(); registerImage(url); return url; } catch (MalformedURLException ex) { ex.printStackTrace(); } return null; } } void registerImage(URL imageURL) { if (loadedImages.containsKey(imageURL)) return; SoftReference ref; try { String fileName = imageURL.getFile(); if (".svg".equals(fileName.substring(fileName.length() - 4).toLowerCase())) { SVGIcon icon = new SVGIcon(); icon.setSvgURI(imageURL.toURI()); BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g = img.createGraphics(); icon.paintIcon(null, g, 0, 0); g.dispose(); ref = new SoftReference(img); } else { BufferedImage img = ImageIO.read(imageURL); ref = new SoftReference(img); } loadedImages.put(imageURL, ref); } catch (Exception e) { System.err.println("Could not load image: " + imageURL); e.printStackTrace(); } } BufferedImage getImage(URL imageURL) { SoftReference ref = (SoftReference)loadedImages.get(imageURL); if (ref == null) return null; BufferedImage img = (BufferedImage)ref.get(); //If image was cleared from memory, reload it if (img == null) { try { img = ImageIO.read(imageURL); } catch (Exception e) { e.printStackTrace(); } ref = new SoftReference(img); loadedImages.put(imageURL, ref); } return img; } /** * Returns the element of the document at the given URI. If the document * is not already loaded, it will be. */ public SVGElement getElement(URI path) { return getElement(path, true); } public SVGElement getElement(URL path) { try { URI uri = new URI(path.toString()); return getElement(uri, true); } catch (Exception e) { e.printStackTrace(); } return null; } /** * Looks up a href within our universe. If the href refers to a document that * is not loaded, it will be loaded. The URL #target will then be checked * against the SVG diagram's index and the coresponding element returned. * If there is no coresponding index, null is returned. */ public SVGElement getElement(URI path, boolean loadIfAbsent) { try { //Strip fragment from URI URI xmlBase = new URI(path.getScheme(), path.getSchemeSpecificPart(), null); SVGDiagram dia = (SVGDiagram)loadedDocs.get(xmlBase); if (dia == null && loadIfAbsent) { //System.err.println("SVGUnivserse: " + xmlBase.toString()); //javax.swing.JOptionPane.showMessageDialog(null, xmlBase.toString()); URL url = xmlBase.toURL(); loadSVG(url, false); dia = (SVGDiagram)loadedDocs.get(xmlBase); if (dia == null) return null; } String fragment = path.getFragment(); return fragment == null ? dia.getRoot() : dia.getElement(fragment); } catch (Exception e) { e.printStackTrace(); return null; } } public SVGDiagram getDiagram(URI xmlBase) { return getDiagram(xmlBase, true); } /** * Returns the diagram that has been loaded from this root. If diagram is * not already loaded, returns null. */ public SVGDiagram getDiagram(URI xmlBase, boolean loadIfAbsent) { if (xmlBase == null) return null; SVGDiagram dia = (SVGDiagram)loadedDocs.get(xmlBase); if (dia != null || !loadIfAbsent) return dia; //Load missing diagram try { URL url; if ("jar".equals(xmlBase.getScheme()) && xmlBase.getPath() != null && !xmlBase.getPath().contains("!/")) { //Workaround for resources stored in jars loaded by Webstart. //http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6753651 url = SVGUniverse.class.getResource("xmlBase.getPath()"); } else { url = xmlBase.toURL(); } loadSVG(url, false); dia = (SVGDiagram)loadedDocs.get(xmlBase); return dia; } catch (Exception e) { e.printStackTrace(); } return null; } /** * Wraps input stream in a BufferedInputStream. If it is detected that this * input stream is GZIPped, also wraps in a GZIPInputStream for inflation. * * @param is Raw input stream * @return Uncompressed stream of SVG data * @throws java.io.IOException */ private InputStream createDocumentInputStream(InputStream is) throws IOException { BufferedInputStream bin = new BufferedInputStream(is); bin.mark(2); int b0 = bin.read(); int b1 = bin.read(); bin.reset(); //Check for gzip magic number if ((b1 << 8 | b0) == GZIPInputStream.GZIP_MAGIC) { GZIPInputStream iis = new GZIPInputStream(bin); return iis; } else { //Plain text return bin; } } public URI loadSVG(URL docRoot) { return loadSVG(docRoot, false); } /** * Loads an SVG file and all the files it references from the URL provided. * If a referenced file already exists in the SVG universe, it is not * reloaded. * @param docRoot - URL to the location where this SVG file can be found. * @param forceLoad - if true, ignore cached diagram and reload * @return - The URI that refers to the loaded document */ public URI loadSVG(URL docRoot, boolean forceLoad) { try { URI uri = new URI(docRoot.toString()); if (loadedDocs.containsKey(uri) && !forceLoad) return uri; InputStream is = docRoot.openStream(); return loadSVG(uri, new InputSource(createDocumentInputStream(is))); } catch (Throwable t) { t.printStackTrace(); } return null; } public URI loadSVG(InputStream is, String name) throws IOException { return loadSVG(is, name, false); } public URI loadSVG(InputStream is, String name, boolean forceLoad) throws IOException { URI uri = getStreamBuiltURI(name); if (uri == null) return null; if (loadedDocs.containsKey(uri) && !forceLoad) return uri; return loadSVG(uri, new InputSource(createDocumentInputStream(is))); } public URI loadSVG(Reader reader, String name) { return loadSVG(reader, name, false); } /** * This routine allows you to create SVG documents from data streams that * may not necessarily have a URL to load from. Since every SVG document * must be identified by a unique URL, Salamander provides a method to * fake this for streams by defining it's own protocol - svgSalamander - * for SVG documents without a formal URL. * * @param reader - A stream containing a valid SVG document * @param name -

A unique name for this document. It will be used to * construct a unique URI to refer to this document and perform resolution * with relative URIs within this document.

*

For example, a name of "/myScene" will produce the URI * svgSalamander:/myScene. "/maps/canada/toronto" will produce * svgSalamander:/maps/canada/toronto. If this second document then * contained the href "../uk/london", it would resolve by default to * svgSalamander:/maps/uk/london. That is, SVG Salamander defines the * URI scheme svgSalamander for it's own internal use and uses it * for uniquely identfying documents loaded by stream.

*

If you need to link to documents outside of this scheme, you can * either supply full hrefs (eg, href="url(http://www.kitfox.com/index.html)") * or put the xml:base attribute in a tag to change the defaultbase * URIs are resolved against

*

If a name does not start with the character '/', it will be automatically * prefixed to it.

* @param forceLoad - if true, ignore cached diagram and reload * * @return - The URI that refers to the loaded document */ public URI loadSVG(Reader reader, String name, boolean forceLoad) { //System.err.println(url.toString()); //Synthesize URI for this stream URI uri = getStreamBuiltURI(name); if (uri == null) return null; if (loadedDocs.containsKey(uri) && !forceLoad) return uri; return loadSVG(uri, new InputSource(reader)); } /** * Synthesize a URI for an SVGDiagram constructed from a stream. * @param name - Name given the document constructed from a stream. */ public URI getStreamBuiltURI(String name) { if (name == null || name.length() == 0) return null; if (name.charAt(0) != '/') name = '/' + name; try { //Dummy URL for SVG documents built from image streams return new URI(INPUTSTREAM_SCHEME, name, null); } catch (Exception e) { e.printStackTrace(); return null; } } private XMLReader getXMLReaderCached() throws SAXException { if (cachedReader == null) { cachedReader = XMLReaderFactory.createXMLReader(); } return cachedReader; } // protected URI loadSVG(URI xmlBase, InputStream is) protected URI loadSVG(URI xmlBase, InputSource is) { // Use an instance of ourselves as the SAX event handler SVGLoader handler = new SVGLoader(xmlBase, this, verbose); //Place this docment in the universe before it is completely loaded // so that the load process can refer to references within it's current // document //System.err.println("SVGUniverse: loading dia " + xmlBase); loadedDocs.put(xmlBase, handler.getLoadedDiagram()); // Use the default (non-validating) parser // SAXParserFactory factory = SAXParserFactory.newInstance(); // factory.setValidating(false); // factory.setNamespaceAware(true); try { // Parse the input XMLReader reader = getXMLReaderCached(); reader.setEntityResolver( new EntityResolver() { public InputSource resolveEntity(String publicId, String systemId) { //Ignore all DTDs return new InputSource(new ByteArrayInputStream(new byte[0])); } } ); reader.setContentHandler(handler); reader.parse(is); // SAXParser saxParser = factory.newSAXParser(); // saxParser.parse(new InputSource(new BufferedReader(is)), handler); return xmlBase; } catch (SAXParseException sex) { System.err.println("Error processing " + xmlBase); System.err.println(sex.getMessage()); loadedDocs.remove(xmlBase); return null; } catch (Throwable t) { t.printStackTrace(); } return null; } public static void main(String argv[]) { try { URL url = new URL("svgSalamander", "localhost", -1, "abc.svg", new URLStreamHandler() { protected URLConnection openConnection(URL u) { return null; } } ); // URL url2 = new URL("svgSalamander", "localhost", -1, "abc.svg"); //Investigate URI resolution URI uriA, uriB, uriC, uriD, uriE; uriA = new URI("svgSalamander", "/names/mySpecialName", null); // uriA = new URI("http://www.kitfox.com/salamander"); // uriA = new URI("svgSalamander://mySpecialName/grape"); System.err.println(uriA.toString()); System.err.println(uriA.getScheme()); uriB = uriA.resolve("#begin"); System.err.println(uriB.toString()); uriC = uriA.resolve("tree#boing"); System.err.println(uriC.toString()); uriC = uriA.resolve("../tree#boing"); System.err.println(uriC.toString()); } catch (Exception e) { e.printStackTrace(); } } public boolean isVerbose() { return verbose; } public void setVerbose(boolean verbose) { this.verbose = verbose; } /** * Uses serialization to duplicate this universe. */ public SVGUniverse duplicate() throws IOException, ClassNotFoundException { ByteArrayOutputStream bs = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bs); os.writeObject(this); os.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bs.toByteArray()); ObjectInputStream is = new ObjectInputStream(bin); SVGUniverse universe = (SVGUniverse)is.readObject(); is.close(); return universe; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/0000755000175000017500000000000011562044257024456 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/Base64InputStream.java0000755000175000017500000000404610761454267030556 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg.xml; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; /** * * @author kitfox */ public class Base64InputStream extends FilterInputStream { int buf; //Cached bytes to read int bufSize; //Number of bytes waiting to be read from buffer boolean drain = false; //After set, read no more chunks public Base64InputStream(InputStream in) { super(in); } public int read() throws IOException { if (drain && bufSize == 0) { return -1; } if (bufSize == 0) { //Read next chunk into 4 byte buffer int chunk = in.read(); if (chunk == -1) { drain = true; return -1; } //get remaining 3 bytes for (int i = 0; i < 3; ++i) { int value = in.read(); if (value == -1) { throw new IOException("Early termination of base64 stream"); } chunk = (chunk << 8) | (value & 0xff); } //Check for special termination characters if ((chunk & 0xffff) == (((byte)'=' << 8) | (byte)'=')) { bufSize = 1; drain = true; } else if ((chunk & 0xff) == (byte)'=') { bufSize = 2; drain = true; } else { bufSize = 3; } //Fill buffer with decoded characters for (int i = 0; i < bufSize + 1; ++i) { buf = (buf << 6) | Base64Util.decodeByte((chunk >> 24) & 0xff); chunk <<= 8; } } //Return nth remaing bte & decrement counter return (buf >> (--bufSize * 8)) & 0xff; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/Base64OutputStream.java0000755000175000017500000000406110761454267030754 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg.xml; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /** * * @author kitfox */ public class Base64OutputStream extends FilterOutputStream { int buf; int numBytes; int numChunks; public Base64OutputStream(OutputStream out) { super(out); } public void flush() throws IOException { out.flush(); } public void close() throws IOException { switch (numBytes) { case 1: buf <<= 4; out.write(getBase64Byte(1)); out.write(getBase64Byte(0)); out.write('='); out.write('='); break; case 2: buf <<= 2; out.write(getBase64Byte(2)); out.write(getBase64Byte(1)); out.write(getBase64Byte(0)); out.write('='); break; case 3: out.write(getBase64Byte(3)); out.write(getBase64Byte(2)); out.write(getBase64Byte(1)); out.write(getBase64Byte(0)); break; default: assert false; } out.close(); } public void write(int b) throws IOException { buf = (buf << 8) | (0xff & b); numBytes++; if (numBytes == 3) { out.write(getBase64Byte(3)); out.write(getBase64Byte(2)); out.write(getBase64Byte(1)); out.write(getBase64Byte(0)); numBytes = 0; numChunks++; if (numChunks == 16) { // out.write('\r'); // out.write('\n'); numChunks = 0; } } } public byte getBase64Byte(int index) { return Base64Util.encodeByte((buf >> (index * 6)) & 0x3f); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/Base64Util.java0000755000175000017500000000131710761454267027216 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg.xml; /** * * @author kitfox */ public class Base64Util { static final byte[] valueToBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".getBytes(); static final byte[] base64ToValue = new byte[128]; static { for (int i = 0; i < valueToBase64.length; ++i) { base64ToValue[valueToBase64[i]] = (byte)i; } } static public byte encodeByte(int value) { return valueToBase64[value]; } static public byte decodeByte(int base64Char) { return base64ToValue[base64Char]; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/StyleAttribute.java0000644000175000017500000002036610761454267030322 0ustar moonmoon/* * StyleAttribute.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 27, 2004, 2:53 PM */ package com.kitfox.svg.xml; import java.awt.*; import java.net.*; import java.io.*; import java.util.regex.*; /** * @author Mark McKay * @author Mark McKay */ public class StyleAttribute implements Serializable { public static final long serialVersionUID = 0; static final Matcher matchUrl = Pattern.compile("\\s*url\\((.*)\\)\\s*").matcher(""); static final Matcher matchFpNumUnits = Pattern.compile("\\s*([-+]?((\\d*\\.\\d+)|(\\d+))([-+]?[eE]\\d+)?)\\s*(px|cm|mm|in|pc|pt|em|ex)\\s*").matcher(""); String name; String stringValue; boolean colorCompatable = false; boolean urlCompatable = false; /** Creates a new instance of StyleAttribute */ public StyleAttribute() { this(null, null); } public StyleAttribute(String name) { this.name = name; stringValue = null; } public StyleAttribute(String name, String stringValue) { this.name = name; this.stringValue = stringValue; } public String getName() { return name; } public StyleAttribute setName(String name) { this.name = name; return this; } public String getStringValue() { return stringValue; } public String[] getStringList() { return XMLParseUtil.parseStringList(stringValue); } public void setStringValue(String value) { stringValue = value; } public boolean getBooleanValue() { return stringValue.toLowerCase().equals("true"); } public int getIntValue() { return XMLParseUtil.findInt(stringValue); } public int[] getIntList() { return XMLParseUtil.parseIntList(stringValue); } public double getDoubleValue() { return XMLParseUtil.findDouble(stringValue); } public double[] getDoubleList() { return XMLParseUtil.parseDoubleList(stringValue); } public float getFloatValue() { return XMLParseUtil.findFloat(stringValue); } public float[] getFloatList() { return XMLParseUtil.parseFloatList(stringValue); } public float getRatioValue() { return (float)XMLParseUtil.parseRatio(stringValue); // try { return Float.parseFloat(stringValue); } // catch (Exception e) {} // return 0f; } public String getUnits() { matchFpNumUnits.reset(stringValue); if (!matchFpNumUnits.matches()) return null; return matchFpNumUnits.group(6); } public NumberWithUnits getNumberWithUnits() { return XMLParseUtil.parseNumberWithUnits(stringValue); } public float getFloatValueWithUnits() { NumberWithUnits number = getNumberWithUnits(); return convertUnitsToPixels(number.getUnits(), number.getValue()); } static public float convertUnitsToPixels(int unitType, float value) { if (unitType == NumberWithUnits.UT_UNITLESS || unitType == NumberWithUnits.UT_PERCENT) { return value; } float pixPerInch; try { pixPerInch = (float)Toolkit.getDefaultToolkit().getScreenResolution(); } catch (HeadlessException ex) { //default to 72 dpi pixPerInch = 72; } final float inchesPerCm = .3936f; switch (unitType) { case NumberWithUnits.UT_IN: return value * pixPerInch; case NumberWithUnits.UT_CM: return value * inchesPerCm * pixPerInch; case NumberWithUnits.UT_MM: return value * .1f * inchesPerCm * pixPerInch; case NumberWithUnits.UT_PT: return value * (1f / 72f) * pixPerInch; case NumberWithUnits.UT_PC: return value * (1f / 6f) * pixPerInch; } return value; } public Color getColorValue() { return ColorTable.parseColor(stringValue); } public String parseURLFn() { matchUrl.reset(stringValue); if (!matchUrl.matches()) return null; return matchUrl.group(1); } public URL getURLValue(URL docRoot) { String fragment = parseURLFn(); if (fragment == null) return null; try { return new URL(docRoot, fragment); } catch (Exception e) { e.printStackTrace(); return null; } } public URL getURLValue(URI docRoot) { String fragment = parseURLFn(); if (fragment == null) return null; try { URI ref = docRoot.resolve(fragment); return ref.toURL(); } catch (Exception e) { e.printStackTrace(); return null; } } public URI getURIValue() { return getURIValue(null); } /** * Parse this sytle attribute as a URL and return it in URI form resolved * against the passed base. * * @param base - URI to resolve against. If null, will return value without * attempting to resolve it. */ public URI getURIValue(URI base) { try { String fragment = parseURLFn(); if (fragment == null) fragment = stringValue.replaceAll("\\s+", ""); if (fragment == null) return null; //====================== //This gets around a bug in the 1.5.0 JDK if (Pattern.matches("[a-zA-Z]:!\\\\.*", fragment)) { File file = new File(fragment); return file.toURI(); } //====================== //[scheme:]scheme-specific-part[#fragment] URI uriFrag = new URI(fragment); if (uriFrag.isAbsolute()) { //Has scheme return uriFrag; } if (base == null) return uriFrag; URI relBase = new URI(null, base.getSchemeSpecificPart(), null); URI relUri; if (relBase.isOpaque()) { relUri = new URI(null, base.getSchemeSpecificPart(), uriFrag.getFragment()); } else { relUri = relBase.resolve(uriFrag); } return new URI(base.getScheme() + ":" + relUri); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { try { URI uri = new URI("jar:http://www.kitfox.com/jackal/jackal.jar!/res/doc/about.svg"); uri = uri.resolve("#myFragment"); System.err.println(uri.toString()); uri = new URI("http://www.kitfox.com/jackal/jackal.html"); uri = uri.resolve("#myFragment"); System.err.println(uri.toString()); } catch (Exception e) { e.printStackTrace(); } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/WritableXMLElement.java0000644000175000017500000000307710627134103030763 0ustar moonmoon/* * LoadableObject.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 1, 2003, 1:46 AM */ package com.kitfox.svg.xml; import org.w3c.dom.*; import java.net.*; import java.util.*; import java.lang.reflect.*; /** * @author Mark McKay * @author Mark McKay */ public interface WritableXMLElement { /** * Initializes this element from the passed DOM tree. * @param root - DOM tree to build from * @param docRoot - URL of the document this DOM tree was created from */ // public void write(Element root, URL docRoot); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/ColorTable.java0000644000175000017500000002751011200145210027330 0ustar moonmoon/* * ColorTable.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 4:34 AM */ package com.kitfox.svg.xml; import java.awt.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Mark McKay * @author Mark McKay */ public class ColorTable { static final Map colorTable; static { HashMap table = new HashMap(); //We really should be interpreting the currentColor keyword as // a reference to the referring node's color, but this quick hack // will stop the program from crashing. table.put("currentcolor", new Color(0x0)); table.put("aliceblue", new Color(0xf0f8ff)); table.put("antiquewhite", new Color(0xfaebd7)); table.put("aqua", new Color(0x00ffff)); table.put("aquamarine", new Color(0x7fffd4)); table.put("azure", new Color(0xf0ffff)); table.put("beige", new Color(0xf5f5dc)); table.put("bisque", new Color(0xffe4c4)); table.put("black", new Color(0x000000)); table.put("blanchedalmond", new Color(0xffebcd)); table.put("blue", new Color(0x0000ff)); table.put("blueviolet", new Color(0x8a2be2)); table.put("brown", new Color(0xa52a2a)); table.put("burlywood", new Color(0xdeb887)); table.put("cadetblue", new Color(0x5f9ea0)); table.put("chartreuse", new Color(0x7fff00)); table.put("chocolate", new Color(0xd2691e)); table.put("coral", new Color(0xff7f50)); table.put("cornflowerblue", new Color(0x6495ed)); table.put("cornsilk", new Color(0xfff8dc)); table.put("crimson", new Color(0xdc143c)); table.put("cyan", new Color(0x00ffff)); table.put("darkblue", new Color(0x00008b)); table.put("darkcyan", new Color(0x008b8b)); table.put("darkgoldenrod", new Color(0xb8860b)); table.put("darkgray", new Color(0xa9a9a9)); table.put("darkgreen", new Color(0x006400)); table.put("darkkhaki", new Color(0xbdb76b)); table.put("darkmagenta", new Color(0x8b008b)); table.put("darkolivegreen", new Color(0x556b2f)); table.put("darkorange", new Color(0xff8c00)); table.put("darkorchid", new Color(0x9932cc)); table.put("darkred", new Color(0x8b0000)); table.put("darksalmon", new Color(0xe9967a)); table.put("darkseagreen", new Color(0x8fbc8f)); table.put("darkslateblue", new Color(0x483d8b)); table.put("darkslategray", new Color(0x2f4f4f)); table.put("darkturquoise", new Color(0x00ced1)); table.put("darkviolet", new Color(0x9400d3)); table.put("deeppink", new Color(0xff1493)); table.put("deepskyblue", new Color(0x00bfff)); table.put("dimgray", new Color(0x696969)); table.put("dodgerblue", new Color(0x1e90ff)); table.put("feldspar", new Color(0xd19275)); table.put("firebrick", new Color(0xb22222)); table.put("floralwhite", new Color(0xfffaf0)); table.put("forestgreen", new Color(0x228b22)); table.put("fuchsia", new Color(0xff00ff)); table.put("gainsboro", new Color(0xdcdcdc)); table.put("ghostwhite", new Color(0xf8f8ff)); table.put("gold", new Color(0xffd700)); table.put("goldenrod", new Color(0xdaa520)); table.put("gray", new Color(0x808080)); table.put("green", new Color(0x008000)); table.put("greenyellow", new Color(0xadff2f)); table.put("honeydew", new Color(0xf0fff0)); table.put("hotpink", new Color(0xff69b4)); table.put("indianred", new Color(0xcd5c5c)); table.put("indigo", new Color(0x4b0082)); table.put("ivory", new Color(0xfffff0)); table.put("khaki", new Color(0xf0e68c)); table.put("lavender", new Color(0xe6e6fa)); table.put("lavenderblush", new Color(0xfff0f5)); table.put("lawngreen", new Color(0x7cfc00)); table.put("lemonchiffon", new Color(0xfffacd)); table.put("lightblue", new Color(0xadd8e6)); table.put("lightcoral", new Color(0xf08080)); table.put("lightcyan", new Color(0xe0ffff)); table.put("lightgoldenrodyellow", new Color(0xfafad2)); table.put("lightgrey", new Color(0xd3d3d3)); table.put("lightgreen", new Color(0x90ee90)); table.put("lightpink", new Color(0xffb6c1)); table.put("lightsalmon", new Color(0xffa07a)); table.put("lightseagreen", new Color(0x20b2aa)); table.put("lightskyblue", new Color(0x87cefa)); table.put("lightslateblue", new Color(0x8470ff)); table.put("lightslategray", new Color(0x778899)); table.put("lightsteelblue", new Color(0xb0c4de)); table.put("lightyellow", new Color(0xffffe0)); table.put("lime", new Color(0x00ff00)); table.put("limegreen", new Color(0x32cd32)); table.put("linen", new Color(0xfaf0e6)); table.put("magenta", new Color(0xff00ff)); table.put("maroon", new Color(0x800000)); table.put("mediumaquamarine", new Color(0x66cdaa)); table.put("mediumblue", new Color(0x0000cd)); table.put("mediumorchid", new Color(0xba55d3)); table.put("mediumpurple", new Color(0x9370d8)); table.put("mediumseagreen", new Color(0x3cb371)); table.put("mediumslateblue", new Color(0x7b68ee)); table.put("mediumspringgreen", new Color(0x00fa9a)); table.put("mediumturquoise", new Color(0x48d1cc)); table.put("mediumvioletred", new Color(0xc71585)); table.put("midnightblue", new Color(0x191970)); table.put("mintcream", new Color(0xf5fffa)); table.put("mistyrose", new Color(0xffe4e1)); table.put("moccasin", new Color(0xffe4b5)); table.put("navajowhite", new Color(0xffdead)); table.put("navy", new Color(0x000080)); table.put("oldlace", new Color(0xfdf5e6)); table.put("olive", new Color(0x808000)); table.put("olivedrab", new Color(0x6b8e23)); table.put("orange", new Color(0xffa500)); table.put("orangered", new Color(0xff4500)); table.put("orchid", new Color(0xda70d6)); table.put("palegoldenrod", new Color(0xeee8aa)); table.put("palegreen", new Color(0x98fb98)); table.put("paleturquoise", new Color(0xafeeee)); table.put("palevioletred", new Color(0xd87093)); table.put("papayawhip", new Color(0xffefd5)); table.put("peachpuff", new Color(0xffdab9)); table.put("peru", new Color(0xcd853f)); table.put("pink", new Color(0xffc0cb)); table.put("plum", new Color(0xdda0dd)); table.put("powderblue", new Color(0xb0e0e6)); table.put("purple", new Color(0x800080)); table.put("red", new Color(0xff0000)); table.put("rosybrown", new Color(0xbc8f8f)); table.put("royalblue", new Color(0x4169e1)); table.put("saddlebrown", new Color(0x8b4513)); table.put("salmon", new Color(0xfa8072)); table.put("sandybrown", new Color(0xf4a460)); table.put("seagreen", new Color(0x2e8b57)); table.put("seashell", new Color(0xfff5ee)); table.put("sienna", new Color(0xa0522d)); table.put("silver", new Color(0xc0c0c0)); table.put("skyblue", new Color(0x87ceeb)); table.put("slateblue", new Color(0x6a5acd)); table.put("slategray", new Color(0x708090)); table.put("snow", new Color(0xfffafa)); table.put("springgreen", new Color(0x00ff7f)); table.put("steelblue", new Color(0x4682b4)); table.put("tan", new Color(0xd2b48c)); table.put("teal", new Color(0x008080)); table.put("thistle", new Color(0xd8bfd8)); table.put("tomato", new Color(0xff6347)); table.put("turquoise", new Color(0x40e0d0)); table.put("violet", new Color(0xee82ee)); table.put("violetred", new Color(0xd02090)); table.put("wheat", new Color(0xf5deb3)); table.put("white", new Color(0xffffff)); table.put("whitesmoke", new Color(0xf5f5f5)); table.put("yellow", new Color(0xffff00)); table.put("yellowgreen", new Color(0x9acd32)); colorTable = Collections.unmodifiableMap(table); } static ColorTable singleton = new ColorTable(); /** Creates a new instance of ColorTable */ protected ColorTable() { // buildColorList(); } static public ColorTable instance() { return singleton; } public Color lookupColor(String name) { Object obj = colorTable.get(name.toLowerCase()); if (obj == null) return null; return (Color)obj; } public static Color parseColor(String val) { Color retVal = null; if (val.charAt(0) == '#') { String hexStrn = val.substring(1); if (hexStrn.length() == 3) { hexStrn = "" + hexStrn.charAt(0) + hexStrn.charAt(0) + hexStrn.charAt(1) + hexStrn.charAt(1) + hexStrn.charAt(2) + hexStrn.charAt(2); } int hexVal = parseHex(hexStrn); retVal = new Color(hexVal); } else { final String number = "\\s*(((\\d+)(\\.\\d*)?)|(\\.\\d+))(%)?\\s*"; final Matcher rgbMatch = Pattern.compile("rgb\\(" + number + "," + number + "," + number + "\\)", Pattern.CASE_INSENSITIVE).matcher(""); rgbMatch.reset(val); if (rgbMatch.matches()) { float rr = Float.parseFloat(rgbMatch.group(1)); float gg = Float.parseFloat(rgbMatch.group(7)); float bb = Float.parseFloat(rgbMatch.group(13)); rr /= "%".equals(rgbMatch.group(6)) ? 100 : 255; gg /= "%".equals(rgbMatch.group(12)) ? 100 : 255; bb /= "%".equals(rgbMatch.group(18)) ? 100 : 255; retVal = new Color(rr, gg, bb); } else { Color lookupCol = ColorTable.instance().lookupColor(val); if (lookupCol != null) retVal = lookupCol; } } return retVal; } public static int parseHex(String val) { int retVal = 0; for (int i = 0; i < val.length(); i++) { retVal <<= 4; char ch = val.charAt(i); if (ch >= '0' && ch <= '9') { retVal |= ch - '0'; } else if (ch >= 'a' && ch <= 'z') { retVal |= ch - 'a' + 10; } else if (ch >= 'A' && ch <= 'Z') { retVal |= ch - 'A' + 10; } else throw new RuntimeException(); } return retVal; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/NumberWithUnits.java0000644000175000017500000001107611452231150030421 0ustar moonmoon/* * NumberWithUnits.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 2:43 PM */ package com.kitfox.svg.xml; import java.io.Serializable; /** * @author Mark McKay * @author Mark McKay */ public class NumberWithUnits implements Serializable { public static final long serialVersionUID = 0; public static final int UT_UNITLESS = 0; public static final int UT_PX = 1; //Pixels public static final int UT_CM = 2; //Centimeters public static final int UT_MM = 3; //Millimeters public static final int UT_IN = 4; //Inches public static final int UT_EM = 5; //Default font height public static final int UT_EX = 6; //Height of character 'x' in default font public static final int UT_PT = 7; //Points - 1/72 of an inch public static final int UT_PC = 8; //Picas - 1/6 of an inch public static final int UT_PERCENT = 9; //Percent - relative width float value = 0f; int unitType = UT_UNITLESS; /** Creates a new instance of NumberWithUnits */ public NumberWithUnits() { } public NumberWithUnits(String value) { set(value); } public NumberWithUnits(float value, int unitType) { this.value = value; this.unitType = unitType; } public float getValue() { return value; } public int getUnits() { return unitType; } public void set(String value) { this.value = XMLParseUtil.findFloat(value); unitType = UT_UNITLESS; if (value.indexOf("px") != -1) { unitType = UT_PX; return; } if (value.indexOf("cm") != -1) { unitType = UT_CM; return; } if (value.indexOf("mm") != -1) { unitType = UT_MM; return; } if (value.indexOf("in") != -1) { unitType = UT_IN; return; } if (value.indexOf("em") != -1) { unitType = UT_EM; return; } if (value.indexOf("ex") != -1) { unitType = UT_EX; return; } if (value.indexOf("pt") != -1) { unitType = UT_PT; return; } if (value.indexOf("pc") != -1) { unitType = UT_PC; return; } if (value.indexOf("%") != -1) { unitType = UT_PERCENT; return; } } public static String unitsAsString(int unitIdx) { switch (unitIdx) { default: return ""; case UT_PX: return "px"; case UT_CM: return "cm"; case UT_MM: return "mm"; case UT_IN: return "in"; case UT_EM: return "em"; case UT_EX: return "ex"; case UT_PT: return "pt"; case UT_PC: return "pc"; case UT_PERCENT: return "%"; } } public String toString() { return "" + value + unitsAsString(unitType); } public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final NumberWithUnits other = (NumberWithUnits) obj; if (Float.floatToIntBits(this.value) != Float.floatToIntBits(other.value)) { return false; } if (this.unitType != other.unitType) { return false; } return true; } public int hashCode() { int hash = 5; hash = 37 * hash + Float.floatToIntBits(this.value); hash = 37 * hash + this.unitType; return hash; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/XMLParseUtil.java0000644000175000017500000005754011526473154027627 0ustar moonmoon/* * XMLParseUtil.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 1:49 PM */ package com.kitfox.svg.xml; import org.w3c.dom.*; import java.awt.*; import java.net.*; import java.util.*; import java.util.regex.*; import java.lang.reflect.*; /** * @author Mark McKay * @author Mark McKay */ public class XMLParseUtil { static final Matcher fpMatch = Pattern.compile("([-+]?((\\d*\\.\\d+)|(\\d+))([eE][+-]?\\d+)?)(\\%|in|cm|mm|pt|pc|px|em|ex)?").matcher(""); static final Matcher intMatch = Pattern.compile("[-+]?\\d+").matcher(""); /** Creates a new instance of XMLParseUtil */ private XMLParseUtil() { } /** * Scans the tag's children and returns the first text element found */ public static String getTagText(Element ele) { NodeList nl = ele.getChildNodes(); int size = nl.getLength(); Node node = null; int i = 0; for (; i < size; i++) { node = nl.item(i); if (node instanceof Text) break; } if (i == size || node == null) return null; return ((Text)node).getData(); } /** * Returns the first node that is a direct child of root with the coresponding * name. Does not search children of children. */ public static Element getFirstChild(Element root, String name) { NodeList nl = root.getChildNodes(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (ele.getTagName().equals(name)) return ele; } return null; } public static String[] parseStringList(String list) { // final Pattern patWs = Pattern.compile("\\s+"); final Matcher matchWs = Pattern.compile("[^\\s]+").matcher(""); matchWs.reset(list); LinkedList matchList = new LinkedList(); while (matchWs.find()) { matchList.add(matchWs.group()); } String[] retArr = new String[matchList.size()]; return (String[])matchList.toArray(retArr); } public static boolean isDouble(String val) { fpMatch.reset(val); return fpMatch.matches(); } public static double parseDouble(String val) { /* if (val == null) return 0.0; double retVal = 0.0; try { retVal = Double.parseDouble(val); } catch (Exception e) {} return retVal; */ return findDouble(val); } /** * Searches the given string for the first floating point number it contains, * parses and returns it. */ public synchronized static double findDouble(String val) { if (val == null) return 0; fpMatch.reset(val); try { if (!fpMatch.find()) return 0; } catch (StringIndexOutOfBoundsException e) { System.err.println("XMLParseUtil: regex parse problem: '" + val + "'"); e.printStackTrace(); } val = fpMatch.group(1); //System.err.println("Parsing " + val); double retVal = 0; try { retVal = Double.parseDouble(val); float pixPerInch; try { pixPerInch = (float)Toolkit.getDefaultToolkit().getScreenResolution(); } catch (NoClassDefFoundError err) { //Default value for headless X servers pixPerInch = 72; } final float inchesPerCm = .3936f; final String units = fpMatch.group(6); if ("%".equals(units)) retVal /= 100; else if ("in".equals(units)) { retVal *= pixPerInch; } else if ("cm".equals(units)) { retVal *= inchesPerCm * pixPerInch; } else if ("mm".equals(units)) { retVal *= inchesPerCm * pixPerInch * .1f; } else if ("pt".equals(units)) { retVal *= (1f / 72f) * pixPerInch; } else if ("pc".equals(units)) { retVal *= (1f / 6f) * pixPerInch; } } catch (Exception e) {} return retVal; } /** * Scans an input string for double values. For each value found, places * in a list. This method regards any characters not part of a floating * point value to be seperators. Thus this will parse whitespace seperated, * comma seperated, and many other separation schemes correctly. */ public synchronized static double[] parseDoubleList(String list) { if (list == null) return null; fpMatch.reset(list); LinkedList doubList = new LinkedList(); while (fpMatch.find()) { String val = fpMatch.group(1); doubList.add(Double.valueOf(val)); } double[] retArr = new double[doubList.size()]; Iterator it = doubList.iterator(); int idx = 0; while (it.hasNext()) { retArr[idx++] = ((Double)it.next()).doubleValue(); } return retArr; } public static float parseFloat(String val) { /* if (val == null) return 0f; float retVal = 0f; try { retVal = Float.parseFloat(val); } catch (Exception e) {} return retVal; */ return findFloat(val); } /** * Searches the given string for the first floating point number it contains, * parses and returns it. */ public synchronized static float findFloat(String val) { if (val == null) return 0f; fpMatch.reset(val); if (!fpMatch.find()) return 0f; val = fpMatch.group(1); //System.err.println("Parsing " + val); float retVal = 0f; try { retVal = Float.parseFloat(val); String units = fpMatch.group(6); if ("%".equals(units)) retVal /= 100; } catch (Exception e) {} return retVal; } public synchronized static float[] parseFloatList(String list) { if (list == null) return null; fpMatch.reset(list); LinkedList floatList = new LinkedList(); while (fpMatch.find()) { String val = fpMatch.group(1); floatList.add(Float.valueOf(val)); } float[] retArr = new float[floatList.size()]; Iterator it = floatList.iterator(); int idx = 0; while (it.hasNext()) { retArr[idx++] = ((Float)it.next()).floatValue(); } return retArr; } public static int parseInt(String val) { if (val == null) return 0; int retVal = 0; try { retVal = Integer.parseInt(val); } catch (Exception e) {} return retVal; } /** * Searches the given string for the first integer point number it contains, * parses and returns it. */ public static int findInt(String val) { if (val == null) return 0; intMatch.reset(val); if (!intMatch.find()) return 0; val = intMatch.group(); //System.err.println("Parsing " + val); int retVal = 0; try { retVal = Integer.parseInt(val); } catch (Exception e) {} return retVal; } public static int[] parseIntList(String list) { if (list == null) return null; intMatch.reset(list); LinkedList intList = new LinkedList(); while (intMatch.find()) { String val = intMatch.group(); intList.add(Integer.valueOf(val)); } int[] retArr = new int[intList.size()]; Iterator it = intList.iterator(); int idx = 0; while (it.hasNext()) { retArr[idx++] = ((Integer)it.next()).intValue(); } return retArr; } /* public static int parseHex(String val) { int retVal = 0; for (int i = 0; i < val.length(); i++) { retVal <<= 4; char ch = val.charAt(i); if (ch >= '0' && ch <= '9') { retVal |= ch - '0'; } else if (ch >= 'a' && ch <= 'z') { retVal |= ch - 'a' + 10; } else if (ch >= 'A' && ch <= 'Z') { retVal |= ch - 'A' + 10; } else throw new RuntimeException(); } return retVal; } */ /** * The input string represents a ratio. Can either be specified as a * double number on the range of [0.0 1.0] or as a percentage [0% 100%] */ public static double parseRatio(String val) { if (val == null || val.equals("")) return 0.0; if (val.charAt(val.length() - 1) == '%') { parseDouble(val.substring(0, val.length() - 1)); } return parseDouble(val); } public static NumberWithUnits parseNumberWithUnits(String val) { if (val == null) return null; return new NumberWithUnits(val); } /* public static Color parseColor(String val) { Color retVal = null; if (val.charAt(0) == '#') { String hexStrn = val.substring(1); if (hexStrn.length() == 3) { hexStrn = "" + hexStrn.charAt(0) + hexStrn.charAt(0) + hexStrn.charAt(1) + hexStrn.charAt(1) + hexStrn.charAt(2) + hexStrn.charAt(2); } int hexVal = parseHex(hexStrn); retVal = new Color(hexVal); } else { final Matcher rgbMatch = Pattern.compile("rgb\\((\\d+),(\\d+),(\\d+)\\)", Pattern.CASE_INSENSITIVE).matcher(""); rgbMatch.reset(val); if (rgbMatch.matches()) { int r = Integer.parseInt(rgbMatch.group(1)); int g = Integer.parseInt(rgbMatch.group(2)); int b = Integer.parseInt(rgbMatch.group(3)); retVal = new Color(r, g, b); } else { Color lookupCol = ColorTable.instance().lookupColor(val); if (lookupCol != null) retVal = lookupCol; } } return retVal; } */ /** * Parses the given attribute of this tag and returns it as a String. */ public static String getAttribString(Element ele, String name) { return ele.getAttribute(name); } /** * Parses the given attribute of this tag and returns it as an int. */ public static int getAttribInt(Element ele, String name) { String sval = ele.getAttribute(name); int val = 0; try { val = Integer.parseInt(sval); } catch (Exception e) {} return val; } /** * Parses the given attribute of this tag as a hexadecimal encoded string and * returns it as an int */ public static int getAttribIntHex(Element ele, String name) { String sval = ele.getAttribute(name); int val = 0; try { val = Integer.parseInt(sval, 16); } catch (Exception e) {} return val; } /** * Parses the given attribute of this tag and returns it as a float */ public static float getAttribFloat(Element ele, String name) { String sval = ele.getAttribute(name); float val = 0.0f; try { val = Float.parseFloat(sval); } catch (Exception e) {} return val; } /** * Parses the given attribute of this tag and returns it as a double. */ public static double getAttribDouble(Element ele, String name) { String sval = ele.getAttribute(name); double val = 0.0; try { val = Double.parseDouble(sval); } catch (Exception e) {} return val; } /** * Parses the given attribute of this tag and returns it as a boolean. * Essentially compares the lower case textual value to the string "true" */ public static boolean getAttribBoolean(Element ele, String name) { String sval = ele.getAttribute(name); return sval.toLowerCase().equals("true"); } public static URL getAttribURL(Element ele, String name, URL docRoot) { String sval = ele.getAttribute(name); URL url; try { return new URL(docRoot, sval); } catch (Exception e) { return null; } } /** * Returns the first ReadableXMLElement with the given name */ public static ReadableXMLElement getElement(Class classType, Element root, String name, URL docRoot) { if (root == null) return null; //Do not process if not a LoadableObject if (!ReadableXMLElement.class.isAssignableFrom(classType)) { return null; } NodeList nl = root.getChildNodes(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; ReadableXMLElement newObj = null; try { newObj = (ReadableXMLElement)classType.newInstance(); } catch (Exception e) { e.printStackTrace(); continue; } newObj.read(ele, docRoot); if (newObj == null) continue; return newObj; } return null; } /** * Returns a HashMap of nodes that are children of root. All nodes will * be of class classType and have a tag name of 'name'. 'key' is * an attribute of tag 'name' who's string value will be used as the key * in the HashMap */ public static HashMap getElementHashMap(Class classType, Element root, String name, String key, URL docRoot) { if (root == null) return null; //Do not process if not a LoadableObject if (!ReadableXMLElement.class.isAssignableFrom(classType)) { return null; } HashMap retMap = new HashMap(); /* Class[] params = {Element.class, URL.class}; Method loadMethod = null; try { loadMethod = classType.getMethod("load", params); } catch (Exception e) { e.printStackTrace(); return null; } */ NodeList nl = root.getChildNodes(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; ReadableXMLElement newObj = null; try { newObj = (ReadableXMLElement)classType.newInstance(); } catch (Exception e) { e.printStackTrace(); continue; } newObj.read(ele, docRoot); /* Object[] args = {ele, source}; Object obj = null; try { obj = loadMethod.invoke(null, args); } catch (Exception e) { e.printStackTrace(); } */ if (newObj == null) continue; String keyVal = getAttribString(ele, key); retMap.put(keyVal, newObj); } return retMap; } public static HashSet getElementHashSet(Class classType, Element root, String name, URL docRoot) { if (root == null) return null; //Do not process if not a LoadableObject if (!ReadableXMLElement.class.isAssignableFrom(classType)) { return null; } HashSet retSet = new HashSet(); /* Class[] params = {Element.class, URL.class}; Method loadMethod = null; try { loadMethod = classType.getMethod("load", params); } catch (Exception e) { e.printStackTrace(); return null; } */ NodeList nl = root.getChildNodes(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; ReadableXMLElement newObj = null; try { newObj = (ReadableXMLElement)classType.newInstance(); } catch (Exception e) { e.printStackTrace(); continue; } newObj.read(ele, docRoot); /* Object[] args = {ele, source}; Object obj = null; try { obj = loadMethod.invoke(null, args); } catch (Exception e) { e.printStackTrace(); } */ if (newObj == null) continue; retSet.add(newObj); } return retSet; } public static LinkedList getElementLinkedList(Class classType, Element root, String name, URL docRoot) { if (root == null) return null; //Do not process if not a LoadableObject if (!ReadableXMLElement.class.isAssignableFrom(classType)) { return null; } NodeList nl = root.getChildNodes(); LinkedList elementCache = new LinkedList(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; ReadableXMLElement newObj = null; try { newObj = (ReadableXMLElement)classType.newInstance(); } catch (Exception e) { e.printStackTrace(); continue; } newObj.read(ele, docRoot); elementCache.addLast(newObj); } return elementCache; } public static Object[] getElementArray(Class classType, Element root, String name, URL docRoot) { if (root == null) return null; //Do not process if not a LoadableObject if (!ReadableXMLElement.class.isAssignableFrom(classType)) { return null; } LinkedList elementCache = getElementLinkedList(classType, root, name, docRoot); Object[] retArr = (Object[])Array.newInstance(classType, elementCache.size()); return elementCache.toArray(retArr); } /** * Takes a number of tags of name 'name' that are children of 'root', and * looks for attributes of 'attrib' on them. Converts attributes to an * int and returns in an array. */ public static int[] getElementArrayInt(Element root, String name, String attrib) { if (root == null) return null; NodeList nl = root.getChildNodes(); LinkedList elementCache = new LinkedList(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; String valS = ele.getAttribute(attrib); int eleVal = 0; try { eleVal = Integer.parseInt(valS); } catch (Exception e) {} elementCache.addLast(new Integer(eleVal)); } int[] retArr = new int[elementCache.size()]; Iterator it = elementCache.iterator(); int idx = 0; while (it.hasNext()) { retArr[idx++] = ((Integer)it.next()).intValue(); } return retArr; } /** * Takes a number of tags of name 'name' that are children of 'root', and * looks for attributes of 'attrib' on them. Converts attributes to an * int and returns in an array. */ public static String[] getElementArrayString(Element root, String name, String attrib) { if (root == null) return null; NodeList nl = root.getChildNodes(); LinkedList elementCache = new LinkedList(); int size = nl.getLength(); for (int i = 0; i < size; i++) { Node node = nl.item(i); if (!(node instanceof Element)) continue; Element ele = (Element)node; if (!ele.getTagName().equals(name)) continue; String valS = ele.getAttribute(attrib); elementCache.addLast(valS); } String[] retArr = new String[elementCache.size()]; Iterator it = elementCache.iterator(); int idx = 0; while (it.hasNext()) { retArr[idx++] = (String)it.next(); } return retArr; } /** * Takes a CSS style string and retursn a hash of them. * @param styleString - A CSS formatted string of styles. Eg, * "font-size:12;fill:#d32c27;fill-rule:evenodd;stroke-width:1pt;" */ public static HashMap parseStyle(String styleString) { return parseStyle(styleString, new HashMap()); } /** * Takes a CSS style string and returns a hash of them. * @param styleString - A CSS formatted string of styles. Eg, * "font-size:12;fill:#d32c27;fill-rule:evenodd;stroke-width:1pt;" * @param map - A map to which these styles will be added */ public static HashMap parseStyle(String styleString, HashMap map) { final Pattern patSemi = Pattern.compile(";"); final Pattern patColonSpace = Pattern.compile(":"); //Strips left and right whitespace final Matcher matcherContent = Pattern.compile("\\s*([^\\s](.*[^\\s])?)\\s*").matcher(""); String[] styles = patSemi.split(styleString); for (int i = 0; i < styles.length; i++) { if (styles[i].length() == 0) { continue; } String[] vals = patColonSpace.split(styles[i]); matcherContent.reset(vals[0]); matcherContent.matches(); vals[0] = matcherContent.group(1); matcherContent.reset(vals[1]); matcherContent.matches(); vals[1] = matcherContent.group(1); map.put(vals[0], new StyleAttribute(vals[0], vals[1])); } return map; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/ReadableXMLElement.java0000644000175000017500000000307410627134103030706 0ustar moonmoon/* * LoadableObject.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 1, 2003, 1:46 AM */ package com.kitfox.svg.xml; import org.w3c.dom.*; import java.net.*; import java.util.*; import java.lang.reflect.*; /** * @author Mark McKay * @author Mark McKay */ public interface ReadableXMLElement { /** * Initializes this element from the passed DOM tree. * @param root - DOM tree to build from * @param docRoot - URL of the document this DOM tree was created from */ public void read(Element root, URL docRoot); } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/cpx/0000755000175000017500000000000011562044257025250 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/cpx/CPXConsts.java0000644000175000017500000000254310627134103027732 0ustar moonmoon/* * CPXConst.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 12, 2004, 12:51 PM */ package com.kitfox.svg.xml.cpx; /** * @author Mark McKay * @author Mark McKay */ public interface CPXConsts { static final byte[] MAGIC_NUMBER = {'C', 'P', 'X', 0}; static final int XL_PLAIN = 0; static final int XL_ZIP_CRYPT = 1; } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/cpx/CPXInputStream.java0000644000175000017500000002256110627134103030736 0ustar moonmoon/* * CPXInputStream.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 12, 2004, 10:34 AM */ package com.kitfox.svg.xml.cpx; import java.io.*; import java.util.*; import java.util.zip.*; import java.security.*; import javax.crypto.*; /** * This class reads/decodes the CPX file format. This format is a simple * compression/encryption transformer for XML data. This stream takes in * encrypted XML and outputs decrypted. It does this by checking for a magic * number at the start of the stream. If absent, it treats the stream as * raw XML data and passes it through unaltered. This is to aid development * in debugging versions, where the XML files will not be in CPX format. * * See http://java.sun.com/developer/technicalArticles/Security/Crypto/ * * @author Mark McKay * @author Mark McKay */ public class CPXInputStream extends FilterInputStream implements CPXConsts { SecureRandom sec = new SecureRandom(); Inflater inflater = new Inflater(); int xlateMode; //Keep header bytes in case this stream turns out to be plain text byte[] head = new byte[4]; int headSize = 0; int headPtr = 0; boolean reachedEOF = false; byte[] inBuffer = new byte[2048]; byte[] decryptBuffer = new byte[2048]; /** Creates a new instance of CPXInputStream */ public CPXInputStream(InputStream in) throws IOException { super(in); //Determine processing type for (int i = 0; i < 4; i++) { int val = in.read(); head[i] = (byte)val; if (val == -1 || head[i] != MAGIC_NUMBER[i]) { headSize = i + 1; xlateMode = XL_PLAIN; return; } } xlateMode = XL_ZIP_CRYPT; } /** * We do not allow marking */ public boolean markSupported() { return false; } /** * Closes this input stream and releases any system resources * associated with the stream. * This * method simply performs in.close(). * * @exception IOException if an I/O error occurs. * @see java.io.FilterInputStream#in */ public void close() throws IOException { reachedEOF = true; in.close(); } /** * Reads the next byte of data from this input stream. The value * byte is returned as an int in the range * 0 to 255. If no byte is available * because the end of the stream has been reached, the value * -1 is returned. This method blocks until input data * is available, the end of the stream is detected, or an exception * is thrown. *

* This method * simply performs in.read() and returns the result. * * @return the next byte of data, or -1 if the end of the * stream is reached. * @exception IOException if an I/O error occurs. * @see java.io.FilterInputStream#in */ public int read() throws IOException { final byte[] b = new byte[1]; int retVal = read(b, 0, 1); if (retVal == -1) return -1; return b[0]; } /** * Reads up to byte.length bytes of data from this * input stream into an array of bytes. This method blocks until some * input is available. *

* This method simply performs the call * read(b, 0, b.length) and returns * the result. It is important that it does * not do in.read(b) instead; * certain subclasses of FilterInputStream * depend on the implementation strategy actually * used. * * @param b the buffer into which the data is read. * @return the total number of bytes read into the buffer, or * -1 if there is no more data because the end of * the stream has been reached. * @exception IOException if an I/O error occurs. * @see java.io.FilterInputStream#read(byte[], int, int) */ public int read(byte[] b) throws IOException { return read(b, 0, b.length); } /** * Reads up to len bytes of data from this input stream * into an array of bytes. This method blocks until some input is * available. *

* This method simply performs in.read(b, off, len) * and returns the result. * * @param b the buffer into which the data is read. * @param off the start offset of the data. * @param len the maximum number of bytes read. * @return the total number of bytes read into the buffer, or * -1 if there is no more data because the end of * the stream has been reached. * @exception IOException if an I/O error occurs. * @see java.io.FilterInputStream#in */ public int read(byte[] b, int off, int len) throws IOException { if (reachedEOF) return -1; if (xlateMode == XL_PLAIN) { int count = 0; //Write header if appropriate while (headPtr < headSize && len > 0) { b[off++] = head[headPtr++]; count++; len--; } return (len == 0) ? count : count + in.read(b, off, len); } //Decrypt and inflate if (inflater.needsInput() && !decryptChunk()) { reachedEOF = true; //Read remaining bytes int numRead; try { numRead = inflater.inflate(b, off, len); } catch (Exception e) { e.printStackTrace(); return -1; } if (!inflater.finished()) { new Exception("Inflation incomplete").printStackTrace(); } return numRead == 0 ? -1 : numRead; } try { return inflater.inflate(b, off, len); } catch (DataFormatException e) { e.printStackTrace(); return -1; } } /** * Call when inflater indicates that it needs more bytes. * @return - true if we decrypted more bytes to deflate, false if we * encountered the end of stream */ protected boolean decryptChunk() throws IOException { while (inflater.needsInput()) { int numInBytes = in.read(inBuffer); if (numInBytes == -1) return false; // int numDecryptBytes = cipher.update(inBuffer, 0, numInBytes, decryptBuffer); // inflater.setInput(decryptBuffer, 0, numDecryptBytes); inflater.setInput(inBuffer, 0, numInBytes); } return true; } /** * This method returns 1 if we've not reached EOF, 0 if we have. Programs * should not rely on this to determine the number of bytes that can be * read without blocking. */ public int available() { return reachedEOF ? 0 : 1; } /** * Skips bytes by reading them into a cached buffer */ public long skip(long n) throws IOException { int skipSize = (int)n; if (skipSize > inBuffer.length) skipSize = inBuffer.length; return read(inBuffer, 0, skipSize); } } /* import java.security.KeyPairGenerator; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import java.security.Cipher; .... java.security.Security.addProvider(new cryptix.provider.Cryptix()); SecureRandom random = new SecureRandom(SecureRandom.getSeed(30)); KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA"); keygen.initialize(1024, random); keypair = keygen.generateKeyPair(); PublicKey pubkey = keypair.getPublic(); PrivateKey privkey = keypair.getPrivate(); */ /* * *Generate key pairs KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); KeyGen.initialize(1024, new SecureRandom(userSeed)); KeyPair pair = KeyGen.generateKeyPair(); */svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/cpx/CPXOutputStream.java0000644000175000017500000001371010627134103031133 0ustar moonmoon/* * CPXOutputStream.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 12, 2004, 12:50 PM */ package com.kitfox.svg.xml.cpx; import java.io.*; import java.util.zip.*; import java.security.*; import javax.crypto.*; /** * @author Mark McKay * @author Mark McKay */ public class CPXOutputStream extends FilterOutputStream implements CPXConsts { Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION); /** Creates a new instance of CPXOutputStream */ public CPXOutputStream(OutputStream os) throws IOException { super(os); //Write magic number os.write(MAGIC_NUMBER); } /** * Writes the specified byte to this output stream. *

* The write method of FilterOutputStream * calls the write method of its underlying output stream, * that is, it performs out.write(b). *

* Implements the abstract write method of OutputStream. * * @param b the byte. * @exception IOException if an I/O error occurs. */ public void write(int b) throws IOException { final byte[] buf = new byte[1]; buf[0] = (byte)b; write(buf, 0, 1); } /** * Writes b.length bytes to this output stream. *

* The write method of FilterOutputStream * calls its write method of three arguments with the * arguments b, 0, and * b.length. *

* Note that this method does not call the one-argument * write method of its underlying stream with the single * argument b. * * @param b the data to be written. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#write(byte[], int, int) */ public void write(byte b[]) throws IOException { write(b, 0, b.length); } byte[] deflateBuffer = new byte[2048]; /** * Writes len bytes from the specified * byte array starting at offset off to * this output stream. *

* The write method of FilterOutputStream * calls the write method of one argument on each * byte to output. *

* Note that this method does not call the write method * of its underlying input stream with the same arguments. Subclasses * of FilterOutputStream should provide a more efficient * implementation of this method. * * @param b the data. * @param off the start offset in the data. * @param len the number of bytes to write. * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#write(int) */ public void write(byte b[], int off, int len) throws IOException { deflater.setInput(b, off, len); processAllData(); /* int numDeflatedBytes; while ((numDeflatedBytes = deflater.deflate(deflateBuffer)) != 0) { // byte[] cipherBuf = cipher.update(deflateBuffer, 0, numDeflatedBytes); // out.write(cipherBytes); out.write(deflateBuffer, 0, numDeflatedBytes); } */ } protected void processAllData() throws IOException { int numDeflatedBytes; while ((numDeflatedBytes = deflater.deflate(deflateBuffer)) != 0) { // byte[] cipherBuf = cipher.update(deflateBuffer, 0, numDeflatedBytes); // out.write(cipherBytes); out.write(deflateBuffer, 0, numDeflatedBytes); } } /** * Flushes this output stream and forces any buffered output bytes * to be written out to the stream. *

* The flush method of FilterOutputStream * calls the flush method of its underlying output stream. * * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public void flush() throws IOException { out.flush(); } /** * Closes this output stream and releases any system resources * associated with the stream. *

* The close method of FilterOutputStream * calls its flush method, and then calls the * close method of its underlying output stream. * * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#flush() * @see java.io.FilterOutputStream#out */ public void close() throws IOException { deflater.finish(); processAllData(); try { flush(); } catch (IOException ignored) { } out.close(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/xml/cpx/CPXTest.java0000644000175000017500000000565210627134103027404 0ustar moonmoon/* * CPXTest.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 12, 2004, 2:45 PM */ package com.kitfox.svg.xml.cpx; import java.io.*; import java.net.*; /** * @author Mark McKay * @author Mark McKay */ public class CPXTest { /** Creates a new instance of CPXTest */ public CPXTest() { // FileInputStream fin = new FileInputStream(); writeTest(); readTest(); } public void writeTest() { try { InputStream is = CPXTest.class.getResourceAsStream("/data/readme.txt"); //System.err.println("Is " + is); FileOutputStream fout = new FileOutputStream("C:\\tmp\\cpxFile.cpx"); CPXOutputStream cout = new CPXOutputStream(fout); byte[] buffer = new byte[1024]; int numBytes; while ((numBytes = is.read(buffer)) != -1) { cout.write(buffer, 0, numBytes); } cout.close(); } catch (Exception e) { e.printStackTrace(); } } public void readTest() { try { // InputStream is = CPXTest.class.getResourceAsStream("/rawdata/test/cpx/text.txt"); // InputStream is = CPXTest.class.getResourceAsStream("/rawdata/test/cpx/cpxFile.cpx"); FileInputStream is = new FileInputStream("C:\\tmp\\cpxFile.cpx"); CPXInputStream cin = new CPXInputStream(is); BufferedReader br = new BufferedReader(new InputStreamReader(cin)); String line; while ((line = br.readLine()) != null) { System.err.println(line); } } catch (Exception e) { e.printStackTrace(); } } /** * @param args the command line arguments */ public static void main(String[] args) { new CPXTest(); } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Marker.java0000644000175000017500000001677711524225604025757 0ustar moonmoon/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.PathIterator; import java.awt.geom.Rectangle2D; import java.util.ArrayList; /** * * @author kitfox */ public class Marker extends Group { AffineTransform viewXform; AffineTransform markerXform; Rectangle2D viewBox; float refX; float refY; float markerWidth = 3; float markerHeight = 3; float orient = Float.NaN; protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("refX"))) refX = sty.getFloatValueWithUnits(); if (getPres(sty.setName("refY"))) refY = sty.getFloatValueWithUnits(); if (getPres(sty.setName("markerWidth"))) markerWidth = sty.getFloatValueWithUnits(); if (getPres(sty.setName("markerHeight"))) markerHeight = sty.getFloatValueWithUnits(); if (getPres(sty.setName("orient"))) { if ("auto".equals(sty.getStringValue())) { orient = Float.NaN; } else { orient = sty.getFloatValue(); } } if (getPres(sty.setName("viewBox"))) { float[] dim = sty.getFloatList(); viewBox = new Rectangle2D.Float(dim[0], dim[1], dim[2], dim[3]); } if (viewBox == null) { viewBox = new Rectangle(0, 0, 1, 1); } //Transform pattern onto unit square viewXform = new AffineTransform(); viewXform.scale(1.0 / viewBox.getWidth(), 1.0 / viewBox.getHeight()); viewXform.translate(-viewBox.getX(), -viewBox.getY()); markerXform = new AffineTransform(); markerXform.scale(markerWidth, markerHeight); markerXform.concatenate(viewXform); markerXform.translate(-refX, -refY); } protected boolean outsideClip(Graphics2D g) throws SVGException { g.getClipBounds(clipBounds); Rectangle2D rect = super.getBoundingBox(); if (rect.intersects(clipBounds)) { return false; } return true; } public void render(Graphics2D g) throws SVGException { AffineTransform oldXform = g.getTransform(); g.transform(markerXform); super.render(g); g.setTransform(oldXform); } public void render(Graphics2D g, MarkerPos pos, float strokeWidth) throws SVGException { AffineTransform cacheXform = g.getTransform(); g.translate(pos.x, pos.y); g.scale(strokeWidth, strokeWidth); g.rotate(Math.atan2(pos.dy, pos.dx)); g.transform(markerXform); super.render(g); g.setTransform(cacheXform); } public Shape getShape() { Shape shape = super.getShape(); return markerXform.createTransformedShape(shape); } public Rectangle2D getBoundingBox() throws SVGException { Rectangle2D rect = super.getBoundingBox(); return markerXform.createTransformedShape(rect).getBounds2D(); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { boolean changeState = super.updateTime(curTime); //Marker properties do not change return changeState; } //-------------------------------- public static final int MARKER_START = 0; public static final int MARKER_MID = 1; public static final int MARKER_END = 2; public static class MarkerPos { int type; double x; double y; double dx; double dy; public MarkerPos(int type, double x, double y, double dx, double dy) { this.type = type; this.x = x; this.y = y; this.dx = dx; this.dy = dy; } } public static class MarkerLayout { private ArrayList markerList = new ArrayList(); boolean started = false; public void layout(Shape shape) { double px = 0; double py = 0; double[] coords = new double[6]; for (PathIterator it = shape.getPathIterator(null); !it.isDone(); it.next()) { switch (it.currentSegment(coords)) { case PathIterator.SEG_MOVETO: px = coords[0]; py = coords[1]; started = false; break; case PathIterator.SEG_CLOSE: started = false; break; case PathIterator.SEG_LINETO: { double x = coords[0]; double y = coords[1]; markerIn(px, py, x - px, y - py); markerOut(x, y, x - px, y - py); px = x; py = y; break; } case PathIterator.SEG_QUADTO: { double k0x = coords[0]; double k0y = coords[1]; double x = coords[2]; double y = coords[3]; markerIn(px, py, k0x - px, k0y - py); markerOut(x, y, x - k0x, y - k0y); px = x; py = y; break; } case PathIterator.SEG_CUBICTO: { double k0x = coords[0]; double k0y = coords[1]; double k1x = coords[2]; double k1y = coords[3]; double x = coords[4]; double y = coords[5]; markerIn(px, py, k0x - px, k0y - py); markerOut(x, y, x - k1x, y - k1y); px = x; py = y; break; } } } for (int i = 1; i < markerList.size(); ++i) { MarkerPos prev = (MarkerPos)markerList.get(i - 1); MarkerPos cur = (MarkerPos)markerList.get(i); if (cur.type == MARKER_START) { prev.type = MARKER_END; } } MarkerPos last = (MarkerPos)markerList.get(markerList.size() - 1); last.type = MARKER_END; } private void markerIn(double x, double y, double dx, double dy) { if (started == false) { started = true; markerList.add(new MarkerPos(MARKER_START, x, y, dx, dy)); } } private void markerOut(double x, double y, double dx, double dy) { markerList.add(new MarkerPos(MARKER_MID, x, y, dx, dy)); } /** * @return the markerList */ public ArrayList getMarkerList() { return markerList; } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Title.java0000644000175000017500000000400710627134103025572 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on September 19, 2004, 1:56 AM */ package com.kitfox.svg; /** * Holds title textual information within tree * * @author Mark McKay * @author Mark McKay */ public class Title extends SVGElement { StringBuffer text = new StringBuffer(); /** Creates a new instance of Stop */ public Title() { } /** * Called during load process to add text scanned within a tag */ public void loaderAddText(SVGLoaderHelper helper, String text) { this.text.append(text); } public String getText() { return text.toString(); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Title does not change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGCache.java0000644000175000017500000000102410627134103026070 0ustar moonmoon/* * SVGUniverseSingleton.java * * Created on April 2, 2005, 1:54 AM */ package com.kitfox.svg; /** * A convienience singleton for allowing all classes to access a common SVG universe. * * @author kitfox */ public class SVGCache { private static final SVGUniverse svgUniverse = new SVGUniverse(); /** Creates a new instance of SVGUniverseSingleton */ private SVGCache() { } public static SVGUniverse getSVGUniverse() { return svgUniverse; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGDiagram.java0000644000175000017500000001477211345751075026462 0ustar moonmoon/* * SVGDiagram.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 5:04 PM */ package com.kitfox.svg; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.io.Serializable; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Top level structure in an SVG tree. * * @author Mark McKay * @author Mark McKay */ public class SVGDiagram implements Serializable { public static final long serialVersionUID = 0; //Indexes elements within this SVG diagram final HashMap idMap = new HashMap(); SVGRoot root; final SVGUniverse universe; /** * This is used by the SVGRoot to determine the width of the */ private Rectangle deviceViewport = new Rectangle(100, 100); /** * If true, no attempt will be made to discard geometry based on it being * out of bounds. This trades potentially drawing many out of bounds * shapes with having to recalculate bounding boxes every animation iteration. */ protected boolean ignoreClipHeuristic = false; /** * URL which uniquely identifies this document */ // final URI docRoot; /** * URI that uniquely identifies this document. Also used to resolve * relative urls. Default base for document. */ final URI xmlBase; /** Creates a new instance of SVGDiagram */ public SVGDiagram(URI xmlBase, SVGUniverse universe) { this.universe = universe; // this.docRoot = docRoot; this.xmlBase = xmlBase; } /** * Draws this diagram to the passed graphics context */ public void render(Graphics2D g) throws SVGException { root.render(g); } /** * Searches thorough the scene graph for all RenderableElements that have * shapes that contain the passed point. * * For every shape which contains the pick point, a List containing the * path to the node is added to the return list. That is, the result of * SVGElement.getPath() is added for each entry. * * @return the passed in list */ public List pick(Point2D point, List retVec) throws SVGException { return pick(point, false, retVec); } public List pick(Point2D point, boolean boundingBox, List retVec) throws SVGException { if (retVec == null) { retVec = new ArrayList(); } root.pick(point, boundingBox, retVec); return retVec; } public List pick(Rectangle2D pickArea, List retVec) throws SVGException { return pick(pickArea, false, retVec); } public List pick(Rectangle2D pickArea, boolean boundingBox, List retVec) throws SVGException { if (retVec == null) { retVec = new ArrayList(); } root.pick(pickArea, new AffineTransform(), boundingBox, retVec); return retVec; } public SVGUniverse getUniverse() { return universe; } public URI getXMLBase() { return xmlBase; } // public URL getDocRoot() // { // return docRoot; // } public float getWidth() { if (root == null) return 0; return root.getDeviceWidth(); } public float getHeight() { if (root == null) return 0; return root.getDeviceHeight(); } /** * Returns the viewing rectangle of this diagram in device coordinates. */ public Rectangle2D getViewRect(Rectangle2D rect) { if (root != null) return root.getDeviceRect(rect); return rect; } public Rectangle2D getViewRect() { return getViewRect(new Rectangle2D.Double()); } public SVGElement getElement(String name) { return (SVGElement)idMap.get(name); } public void setElement(String name, SVGElement node) { idMap.put(name, node); } public void removeElement(String name) { idMap.remove(name); } public SVGRoot getRoot() { return root; } public void setRoot(SVGRoot root) { this.root = root; } public boolean ignoringClipHeuristic() { return ignoreClipHeuristic; } public void setIgnoringClipHeuristic(boolean ignoreClipHeuristic) { this.ignoreClipHeuristic = ignoreClipHeuristic; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. */ public void updateTime(double curTime) throws SVGException { if (root == null) return; root.updateTime(curTime); } public Rectangle getDeviceViewport() { return deviceViewport; } /** * Sets the dimensions of the device being rendered into. This is used by * SVGRoot when its x, y, width or height parameters are specified as * percentages. */ public void setDeviceViewport(Rectangle deviceViewport) { this.deviceViewport.setBounds(deviceViewport); if (root != null) { try { root.build(); } catch (SVGException ex) { ex.printStackTrace(); } } } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FilterEffects.java0000644000175000017500000001526510627134103027246 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class FilterEffects extends SVGElement { public static final int FP_SOURCE_GRAPHIC = 0; public static final int FP_SOURCE_ALPHA = 1; public static final int FP_BACKGROUND_IMAGE = 2; public static final int FP_BACKGROUND_ALPHA = 3; public static final int FP_FILL_PAINT = 4; public static final int FP_STROKE_PAINT = 5; public static final int FP_CUSTOM = 5; private int filterPrimitiveTypeIn; private String filterPrimitiveRefIn; float x = 0f; float y = 0f; float width = 1f; float height = 1f; String result = "defaultFilterName"; URL href = null; /** Creates a new instance of FillElement */ public FilterEffects() { } /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); if (child instanceof FilterEffects) { // filterEffects.add(child); } } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; /* if (getPres(sty.setName("filterUnits"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) filterUnits = FU_USER_SPACE_ON_USE; else filterUnits = FU_OBJECT_BOUNDING_BOX; } if (getPres(sty.setName("primitiveUnits"))) { strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) primitiveUnits = PU_USER_SPACE_ON_USE; else primitiveUnits = PU_OBJECT_BOUNDING_BOX; } if (getPres(sty.setName("x"))) x = sty.getFloatValue(); if (getPres(sty.setName("y"))) y = sty.getFloatValue(); if (getPres(sty.setName("width"))) width = sty.getFloatValue(); if (getPres(sty.setName("height"))) height = sty.getFloatValue(); try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); href = src.toURL(); } } catch (Exception e) { throw new SVGException(e); } */ } public float getX() { return x; } public float getY() { return y; } public float getWidth() { return width; } public float getHeight() { return height; } public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; stateChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; stateChange = true; } } if (getPres(sty.setName("width"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != width) { width = newVal; stateChange = true; } } if (getPres(sty.setName("height"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != height) { height = newVal; stateChange = true; } } try { if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); URL newVal = src.toURL(); if (!newVal.equals(href)) { href = newVal; stateChange = true; } } } catch (Exception e) { throw new SVGException(e); } /* if (getPres(sty.setName("filterUnits"))) { int newVal; String strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) newVal = FU_USER_SPACE_ON_USE; else newVal = FU_OBJECT_BOUNDING_BOX; if (newVal != filterUnits) { filterUnits = newVal; stateChange = true; } } if (getPres(sty.setName("primitiveUnits"))) { int newVal; String strn = sty.getStringValue().toLowerCase(); if (strn.equals("userspaceonuse")) newVal = PU_USER_SPACE_ON_USE; else newVal = PU_OBJECT_BOUNDING_BOX; if (newVal != filterUnits) { primitiveUnits = newVal; stateChange = true; } } */ return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FontFace.java0000644000175000017500000001651510627134103026205 0ustar moonmoon/* * Font.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 20, 2004, 10:00 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import com.kitfox.svg.xml.*; import org.xml.sax.*; import java.awt.geom.*; import java.awt.*; /** * Implements an embedded font. * * SVG specification: http://www.w3.org/TR/SVG/fonts.html * * @author Mark McKay * @author Mark McKay */ public class FontFace extends SVGElement { String fontFamily; /** Em size of coordinate system font is defined in */ int unitsPerEm = 1000; int ascent = -1; int descent = -1; int accentHeight = -1; int underlinePosition = -1; int underlineThickness = -1; int strikethroughPosition = -1; int strikethroughThickness = -1; int overlinePosition = -1; int overlineThickness = -1; /** Creates a new instance of Font */ public FontFace() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); fontFamily = attrs.getValue("font-family"); String unitsPerEm = attrs.getValue("units-per-em"); String ascent = attrs.getValue("ascent"); String descent = attrs.getValue("descent"); String accentHeight = attrs.getValue("accent-height"); String underlinePosition = attrs.getValue("underline-position"); String underlineThickness = attrs.getValue("underline-thickness"); String strikethroughPosition = attrs.getValue("strikethrough-position"); String strikethroughThickness = attrs.getValue("strikethrough-thickness"); String overlinePosition = attrs.getValue("overline-position"); String overlineThickness = attrs.getValue("overline-thickness"); if (unitsPerEm != null) this.unitsPerEm = XMLParseUtil.parseInt(unitsPerEm); if (ascent != null) this.ascent = XMLParseUtil.parseInt(ascent); if (descent != null) this.descent = XMLParseUtil.parseInt(descent); if (accentHeight != null) this.accentHeight = XMLParseUtil.parseInt(accentHeight); if (underlinePosition != null) this.underlinePosition = XMLParseUtil.parseInt(underlinePosition); if (underlineThickness != null) this.underlineThickness = XMLParseUtil.parseInt(underlineThickness); if (strikethroughPosition != null) this.strikethroughPosition = XMLParseUtil.parseInt(strikethroughPosition); if (strikethroughThickness != null) this.strikethroughThickness = XMLParseUtil.parseInt(strikethroughThickness); if (overlinePosition != null) this.overlinePosition = XMLParseUtil.parseInt(overlinePosition); if (overlineThickness != null) this.overlineThickness = XMLParseUtil.parseInt(overlineThickness); // unitFontXform.setToScale(1.0 / (double)unitsPerEm, 1.0 / (double)unitsPerEm); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { super.loaderEndElement(helper); build(); // unitFontXform.setToScale(1.0 / (double)unitsPerEm, 1.0 / (double)unitsPerEm); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("font-family"))) fontFamily = sty.getStringValue(); if (getPres(sty.setName("units-per-em"))) unitsPerEm = sty.getIntValue(); if (getPres(sty.setName("ascent"))) ascent = sty.getIntValue(); if (getPres(sty.setName("descent"))) descent = sty.getIntValue(); if (getPres(sty.setName("accent-height"))) accentHeight = sty.getIntValue(); if (getPres(sty.setName("underline-position"))) underlinePosition = sty.getIntValue(); if (getPres(sty.setName("underline-thickness"))) underlineThickness = sty.getIntValue(); if (getPres(sty.setName("strikethrough-position"))) strikethroughPosition = sty.getIntValue(); if (getPres(sty.setName("strikethrough-thickenss"))) strikethroughThickness = sty.getIntValue(); if (getPres(sty.setName("overline-position"))) overlinePosition = sty.getIntValue(); if (getPres(sty.setName("overline-thickness"))) overlineThickness = sty.getIntValue(); } public String getFontFamily() { return fontFamily; } public int getUnitsPerEm() { return unitsPerEm; } public int getAscent() { if (ascent == -1) ascent = unitsPerEm - ((Font)parent).getVertOriginY(); return ascent; } public int getDescent() { if (descent == -1) descent = ((Font)parent).getVertOriginY(); return descent; } public int getAccentHeight() { if (accentHeight == -1) accentHeight = getAscent(); return accentHeight; } public int getUnderlinePosition() { if (underlinePosition == -1) underlinePosition = unitsPerEm * 5 / 6; return underlinePosition; } public int getUnderlineThickness() { if (underlineThickness == -1) underlineThickness = unitsPerEm / 20; return underlineThickness; } public int getStrikethroughPosition() { if (strikethroughPosition == -1) strikethroughPosition = unitsPerEm * 3 / 6; return strikethroughPosition; } public int getStrikethroughThickness() { if (strikethroughThickness == -1) strikethroughThickness = unitsPerEm / 20; return strikethroughThickness; } public int getOverlinePosition() { if (overlinePosition == -1) overlinePosition = unitsPerEm * 5 / 6; return overlinePosition; } public int getOverlineThickness() { if (overlineThickness == -1) overlineThickness = unitsPerEm / 20; return overlineThickness; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) { //Fonts can't change return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Stop.java0000644000175000017500000000744410627134103025446 0ustar moonmoon/* * Stop.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:56 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class Stop extends SVGElement { float offset = 0f; float opacity = 1f; Color color = Color.black; /** Creates a new instance of Stop */ public Stop() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String offset = attrs.getValue("offset"); this.offset = (float)XMLParseUtil.parseRatio(offset); buildStop(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("offset"))) { offset = sty.getFloatValue(); String units = sty.getUnits(); if (units != null && units.equals("%")) offset /= 100f; if (offset > 1) offset = 1; if (offset < 0) offset = 0; } if (getStyle(sty.setName("stop-color"))) color = sty.getColorValue(); if (getStyle(sty.setName("stop-opacity"))) opacity = sty.getRatioValue(); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("offset"))) { float newVal = sty.getFloatValue(); if (newVal != offset) { offset = newVal; shapeChange = true; } } if (getPres(sty.setName("stop-color"))) { Color newVal = sty.getColorValue(); if (newVal != color) { color = newVal; shapeChange = true; } } if (getPres(sty.setName("stop-opacity"))) { float newVal = sty.getFloatValue(); if (newVal != opacity) { opacity = newVal; shapeChange = true; } } return shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGLoader.java0000644000175000017500000002101711536777535026325 0ustar moonmoon/* * SVGLoader.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 5:09 PM */ package com.kitfox.svg; import java.util.*; import java.net.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import com.kitfox.svg.animation.*; /** * @author Mark McKay * @author Mark McKay */ public class SVGLoader extends DefaultHandler { final HashMap nodeClasses = new HashMap(); //final HashMap attribClasses = new HashMap(); final LinkedList buildStack = new LinkedList(); final HashSet ignoreClasses = new HashSet(); final SVGLoaderHelper helper; /** * The diagram that represents the base of this SVG document we're loading. * Will be augmented to include node indexing info and other useful stuff. */ final SVGDiagram diagram; // SVGElement loadRoot; //Used to keep track of document elements that are not part of the SVG namespace int skipNonSVGTagDepth = 0; int indent = 0; final boolean verbose; /** Creates a new instance of SVGLoader */ public SVGLoader(URI xmlBase, SVGUniverse universe) { this(xmlBase, universe, false); } public SVGLoader(URI xmlBase, SVGUniverse universe, boolean verbose) { this.verbose = verbose; diagram = new SVGDiagram(xmlBase, universe); //Compile a list of important builder classes nodeClasses.put("a", A.class); nodeClasses.put("animate", Animate.class); nodeClasses.put("animatecolor", AnimateColor.class); nodeClasses.put("animatemotion", AnimateMotion.class); nodeClasses.put("animatetransform", AnimateTransform.class); nodeClasses.put("circle", Circle.class); nodeClasses.put("clippath", ClipPath.class); nodeClasses.put("defs", Defs.class); nodeClasses.put("desc", Desc.class); nodeClasses.put("ellipse", Ellipse.class); nodeClasses.put("filter", Filter.class); nodeClasses.put("font", Font.class); nodeClasses.put("font-face", FontFace.class); nodeClasses.put("g", Group.class); nodeClasses.put("glyph", Glyph.class); nodeClasses.put("hkern", Hkern.class); nodeClasses.put("image", ImageSVG.class); nodeClasses.put("line", Line.class); nodeClasses.put("lineargradient", LinearGradient.class); nodeClasses.put("marker", Marker.class); nodeClasses.put("metadata", Metadata.class); nodeClasses.put("missing-glyph", MissingGlyph.class); nodeClasses.put("path", Path.class); nodeClasses.put("pattern", PatternSVG.class); nodeClasses.put("polygon", Polygon.class); nodeClasses.put("polyline", Polyline.class); nodeClasses.put("radialgradient", RadialGradient.class); nodeClasses.put("rect", Rect.class); nodeClasses.put("set", SetSmil.class); nodeClasses.put("shape", ShapeElement.class); nodeClasses.put("stop", Stop.class); nodeClasses.put("style", Style.class); nodeClasses.put("svg", SVGRoot.class); nodeClasses.put("symbol", Symbol.class); nodeClasses.put("text", Text.class); nodeClasses.put("title", Title.class); nodeClasses.put("tspan", Tspan.class); nodeClasses.put("use", Use.class); ignoreClasses.add("midpointstop"); //attribClasses.put("clip-path", StyleUrl.class); //attribClasses.put("color", StyleColor.class); helper = new SVGLoaderHelper(xmlBase, universe, diagram); } private String printIndent(int indent, String indentStrn) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < indent; i++) { sb.append(indentStrn); } return sb.toString(); } public void startDocument() throws SAXException { // System.err.println("Start doc"); // buildStack.clear(); } public void endDocument() throws SAXException { // System.err.println("End doc"); } public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException { if (verbose) { System.err.println(printIndent(indent, " ") + "Starting parse of tag " + sName+ ": " + namespaceURI); } indent++; if (skipNonSVGTagDepth != 0 || (!namespaceURI.equals("") && !namespaceURI.equals(SVGElement.SVG_NS))) { skipNonSVGTagDepth++; return; } sName = sName.toLowerCase(); //javax.swing.JOptionPane.showMessageDialog(null, sName); Object obj = nodeClasses.get(sName); if (obj == null) { if (!ignoreClasses.contains(sName)) { if (verbose) { System.err.println("SVGLoader: Could not identify tag '" + sName + "'"); } } return; } //Debug info tag depth //for (int i = 0; i < buildStack.size(); i++) System.err.print(" "); //System.err.println("+" + sName); try { Class cls = (Class)obj; SVGElement svgEle = (SVGElement)cls.newInstance(); SVGElement parent = null; if (buildStack.size() != 0) parent = (SVGElement)buildStack.getLast(); svgEle.loaderStartElement(helper, attrs, parent); buildStack.addLast(svgEle); } catch (Exception e) { e.printStackTrace(); throw new SAXException(e); } } public void endElement(String namespaceURI, String sName, String qName) throws SAXException { indent--; if (verbose) { System.err.println(printIndent(indent, " ") + "Ending parse of tag " + sName+ ": " + namespaceURI); } if (skipNonSVGTagDepth != 0) { skipNonSVGTagDepth--; return; } sName = sName.toLowerCase(); Object obj = nodeClasses.get(sName); if (obj == null) return; //Debug info tag depth //for (int i = 0; i < buildStack.size(); i++) System.err.print(" "); //System.err.println("-" + sName); try { SVGElement svgEle = (SVGElement)buildStack.removeLast(); svgEle.loaderEndElement(helper); SVGElement parent = null; if (buildStack.size() != 0) parent = (SVGElement)buildStack.getLast(); //else loadRoot = (SVGElement)svgEle; if (parent != null) parent.loaderAddChild(helper, svgEle); else diagram.setRoot((SVGRoot)svgEle); } catch (Exception e) { e.printStackTrace(); throw new SAXException(e); } } public void characters(char buf[], int offset, int len) throws SAXException { if (skipNonSVGTagDepth != 0) { return; } if (buildStack.size() != 0) { SVGElement parent = (SVGElement)buildStack.getLast(); String s = new String(buf, offset, len); parent.loaderAddText(helper, s); } } public void processingInstruction(String target, String data) throws SAXException { //Check for external style sheet } // public SVGElement getLoadRoot() { return loadRoot; } public SVGDiagram getLoadedDiagram() { return diagram; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGLoaderHelper.java0000644000175000017500000000456510627134103027450 0ustar moonmoon/* * SVGLoaderHelper.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on February 18, 2004, 5:37 PM */ package com.kitfox.svg; import java.net.*; import java.io.*; import com.kitfox.svg.animation.parser.*; /** * @author Mark McKay * @author Mark McKay */ public class SVGLoaderHelper { /** This is the URL that this document is being loaded from */ // public final URL docRoot; // public final URI docRoot; /** This is the universe of all currently loaded SVG documents */ public final SVGUniverse universe; /** This is the diagram which the load process is currently loading */ public final SVGDiagram diagram; public final URI xmlBase; /** * Animate nodes use this to parse their time strings */ public final AnimTimeParser animTimeParser = new AnimTimeParser(new StringReader("")); /** Creates a new instance of SVGLoaderHelper */ public SVGLoaderHelper(URI xmlBase, SVGUniverse universe, SVGDiagram diagram) { /* URI docURI = null; try { docURI = new URI(docRoot.toString()); } catch (Exception e) { e.printStackTrace(); } */ this.xmlBase = xmlBase; // this.docRoot = docURI; this.universe = universe; this.diagram = diagram; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/LinearGradient.java0000644000175000017500000001521510627134103027404 0ustar moonmoon/* * LinearGradient.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:54 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.geom.*; import java.awt.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; //import org.apache.batik.ext.awt.*; import com.kitfox.svg.batik.*; /** * @author Mark McKay * @author Mark McKay */ public class LinearGradient extends Gradient { float x1 = 0f; float y1 = 0f; float x2 = 1f; float y2 = 0f; /** Creates a new instance of LinearGradient */ public LinearGradient() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x1 = attrs.getValue("x1"); String x2 = attrs.getValue("x2"); String y1 = attrs.getValue("y1"); String y2 = attrs.getValue("y2"); if (x1 != null) this.x1 = (float)XMLParseUtil.parseRatio(x1); if (y1 != null) this.y1 = (float)XMLParseUtil.parseRatio(y1); if (x2 != null) this.x2 = (float)XMLParseUtil.parseRatio(x2); if (y2 != null) this.y2 = (float)XMLParseUtil.parseRatio(y2); } */ /* public void loaderEndElement(SVGLoaderHelper helper) { super.loaderEndElement(helper); build(); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x1"))) x1 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y1"))) y1 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("x2"))) x2 = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y2"))) y2 = sty.getFloatValueWithUnits(); } public Paint getPaint(Rectangle2D bounds, AffineTransform xform) { com.kitfox.svg.batik.MultipleGradientPaint.CycleMethodEnum method; switch (spreadMethod) { default: case SM_PAD: method = com.kitfox.svg.batik.MultipleGradientPaint.NO_CYCLE; break; case SM_REPEAT: method = com.kitfox.svg.batik.MultipleGradientPaint.REPEAT; break; case SM_REFLECT: method = com.kitfox.svg.batik.MultipleGradientPaint.REFLECT; break; } com.kitfox.svg.batik.LinearGradientPaint paint; if (gradientUnits == GU_USER_SPACE_ON_USE) { // paint = new LinearGradientPaint(x1, y1, x2, y2, getStopFractions(), getStopColors(), method); paint = new com.kitfox.svg.batik.LinearGradientPaint( new Point2D.Float(x1, y1), new Point2D.Float(x2, y2), getStopFractions(), getStopColors(), method, com.kitfox.svg.batik.MultipleGradientPaint.SRGB, gradientTransform); } else { AffineTransform viewXform = new AffineTransform(); viewXform.translate(bounds.getX(), bounds.getY()); //This is a hack to get around shapes that have a width or height of 0. Should be close enough to the true answer. double width = bounds.getWidth(); double height = bounds.getHeight(); if (width == 0) width = 1; if (height == 0) height = 1; viewXform.scale(width, height); viewXform.concatenate(gradientTransform); paint = new com.kitfox.svg.batik.LinearGradientPaint( new Point2D.Float(x1, y1), new Point2D.Float(x2, y2), getStopFractions(), getStopColors(), method, com.kitfox.svg.batik.MultipleGradientPaint.SRGB, viewXform); } return paint; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return stopChange; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x1"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x1) { x1 = newVal; shapeChange = true; } } if (getPres(sty.setName("y1"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y1) { y1 = newVal; shapeChange = true; } } if (getPres(sty.setName("x2"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x2) { x2 = newVal; shapeChange = true; } } if (getPres(sty.setName("y2"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y2) { y2 = newVal; shapeChange = true; } } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/FeSpotLight.java0000644000175000017500000001273310627134103026706 0ustar moonmoon/* * FillElement.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on March 18, 2004, 6:52 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.net.*; import java.util.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class FeSpotLight extends FeLight { float x = 0f; float y = 0f; float z = 0f; float pointsAtX = 0f; float pointsAtY = 0f; float pointsAtZ = 0f; float specularComponent = 0f; float limitingConeAngle = 0f; /** Creates a new instance of FillElement */ public FeSpotLight() { } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String strn; if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("z"))) z = sty.getFloatValueWithUnits(); if (getPres(sty.setName("pointsAtX"))) pointsAtX = sty.getFloatValueWithUnits(); if (getPres(sty.setName("pointsAtY"))) pointsAtY = sty.getFloatValueWithUnits(); if (getPres(sty.setName("pointsAtZ"))) pointsAtZ = sty.getFloatValueWithUnits(); if (getPres(sty.setName("specularComponent"))) specularComponent = sty.getFloatValueWithUnits(); if (getPres(sty.setName("limitingConeAngle"))) limitingConeAngle = sty.getFloatValueWithUnits(); } public float getX() { return x; } public float getY() { return y; } public float getZ() { return z; } public float getPointsAtX() { return pointsAtX; } public float getPointsAtY() { return pointsAtY; } public float getPointsAtZ() { return pointsAtZ; } public float getSpecularComponent() { return specularComponent; } public float getLimitingConeAngle() { return limitingConeAngle; } public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean stateChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; stateChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; stateChange = true; } } if (getPres(sty.setName("z"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != z) { z = newVal; stateChange = true; } } if (getPres(sty.setName("pointsAtX"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != pointsAtX) { pointsAtX = newVal; stateChange = true; } } if (getPres(sty.setName("pointsAtY"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != pointsAtY) { pointsAtY = newVal; stateChange = true; } } if (getPres(sty.setName("pointsAtZ"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != pointsAtZ) { pointsAtZ = newVal; stateChange = true; } } if (getPres(sty.setName("specularComponent"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != specularComponent) { specularComponent = newVal; stateChange = true; } } if (getPres(sty.setName("limitingConeAngle"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != limitingConeAngle) { limitingConeAngle = newVal; stateChange = true; } } return stateChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/SVGElementException.java0000644000175000017500000000255210627134103030344 0ustar moonmoon/* * SVGException.java * * Created on May 12, 2005, 11:32 PM * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package com.kitfox.svg; /** * * @author kitfox */ public class SVGElementException extends SVGException { public static final long serialVersionUID = 0; private final SVGElement element; /** * Creates a new instance of SVGException without detail message. */ public SVGElementException(SVGElement element) { this(element, null, null); } /** * Constructs an instance of SVGException with the specified detail message. * @param msg the detail message. */ public SVGElementException(SVGElement element, String msg) { this(element, msg, null); } public SVGElementException(SVGElement element, String msg, Throwable cause) { super(msg, cause); this.element = element; } public SVGElementException(SVGElement element, Throwable cause) { this(element, null, cause); } public SVGElement getElement() { return element; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Path.java0000644000175000017500000001106511452231150025404 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import com.kitfox.svg.pathcmd.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; //import org.apache.batik.ext.awt.geom.ExtendedGeneralPath; /** * @author Mark McKay * @author Mark McKay */ public class Path extends ShapeElement { // PathCommand[] commands = null; int fillRule = GeneralPath.WIND_NON_ZERO; String d = ""; // ExtendedGeneralPath path; GeneralPath path; /** Creates a new instance of Rect */ public Path() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); StyleAttribute styleAttrib = getStyle("fill-rule"); String fillRule = (styleAttrib == null) ? "nonzero" : styleAttrib.getStringValue(); String d = attrs.getValue("d"); path = buildPath(d, fillRule.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); String fillRuleStrn = (getStyle(sty.setName("fill-rule"))) ? sty.getStringValue() : "nonzero"; fillRule = fillRuleStrn.equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; // String d = ""; if (getPres(sty.setName("d"))) d = sty.getStringValue(); //System.err.println(d); path = buildPath(d, fillRule); //System.err.println(d); } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, path); finishLayer(g); } public Shape getShape() { return shapeToParent(path); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(path.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getStyle(sty.setName("fill-rule"))) { int newVal = sty.getStringValue().equals("evenodd") ? GeneralPath.WIND_EVEN_ODD : GeneralPath.WIND_NON_ZERO; if (newVal != fillRule) { fillRule = newVal; changeState = true; } } if (getPres(sty.setName("d"))) { String newVal = sty.getStringValue(); if (!newVal.equals(d)) { d = newVal; shapeChange = true; } } if (shapeChange) { build(); // path = buildPath(d, fillRule); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Use.java0000644000175000017500000001711511452231150025246 0ustar moonmoon/* * LinearGradient.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 1:54 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.net.URI; /** * @author Mark McKay * @author Mark McKay */ public class Use extends ShapeElement { float x = 0f; float y = 0f; float width = 1f; float height = 1f; SVGElement href = null; AffineTransform refXform; /** Creates a new instance of LinearGradient */ public Use() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x = attrs.getValue("x"); String y = attrs.getValue("y"); String width = attrs.getValue("width"); String height = attrs.getValue("height"); String href = attrs.getValue("xlink:href"); if (x != null) this.x = (float)XMLParseUtil.parseRatio(x); if (y != null) this.y = (float)XMLParseUtil.parseRatio(y); if (width != null) this.width = (float)XMLParseUtil.parseRatio(width); if (height != null) this.height = (float)XMLParseUtil.parseRatio(height); if (href != null) { try { URI src = getXMLBase().resolve(href); this.href = helper.universe.getElement(src); } catch (Exception e) { e.printStackTrace(); } } //Determine use offset/scale refXform = new AffineTransform(); refXform.translate(this.x, this.y); refXform.scale(this.width, this.height); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); href = diagram.getUniverse().getElement(src); } //Determine use offset/scale refXform = new AffineTransform(); refXform.translate(this.x, this.y); } public void render(Graphics2D g) throws SVGException { beginLayer(g); //AffineTransform oldXform = g.getTransform(); AffineTransform oldXform = g.getTransform(); g.transform(refXform); if (href == null || !(href instanceof RenderableElement)) return; RenderableElement rendEle = (RenderableElement)href; rendEle.pushParentContext(this); rendEle.render(g); rendEle.popParentContext(); g.setTransform(oldXform); finishLayer(g); } public Shape getShape() { if (href instanceof ShapeElement) { Shape shape = ((ShapeElement)href).getShape(); shape = refXform.createTransformedShape(shape); shape = shapeToParent(shape); return shape; } return null; } public Rectangle2D getBoundingBox() throws SVGException { if (href instanceof ShapeElement) { ShapeElement shapeEle = (ShapeElement)href; shapeEle.pushParentContext(this); Rectangle2D bounds = shapeEle.getBoundingBox(); shapeEle.popParentContext(); bounds = refXform.createTransformedShape(bounds).getBounds2D(); bounds = boundsToParent(bounds); return bounds; } return null; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; shapeChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; shapeChange = true; } } if (getPres(sty.setName("width"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != width) { width = newVal; shapeChange = true; } } if (getPres(sty.setName("height"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != height) { height = newVal; shapeChange = true; } } if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); SVGElement newVal = diagram.getUniverse().getElement(src); if (newVal != href) { href = newVal; shapeChange = true; } } /* if (getPres(sty.setName("xlink:href"))) { URI src = sty.getURIValue(getXMLBase()); href = diagram.getUniverse().getElement(src); } //Determine use offset/scale refXform = new AffineTransform(); refXform.translate(this.x, this.y); refXform.scale(this.width, this.height); */ if (shapeChange) { build(); //Determine use offset/scale // refXform.setToTranslation(this.x, this.y); // refXform.scale(this.width, this.height); // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/Rect.java0000644000175000017500000001714611452231150025413 0ustar moonmoon/* * Rect.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 5:25 PM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.awt.*; import java.awt.geom.*; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * @author Mark McKay * @author Mark McKay */ public class Rect extends ShapeElement { float x = 0f; float y = 0f; float width = 0f; float height = 0f; float rx = 0f; float ry = 0f; RectangularShape rect; /** Creates a new instance of Rect */ public Rect() { } private void writeObject(ObjectOutputStream out) throws IOException { out.writeFloat(x); out.writeFloat(y); out.writeFloat(width); out.writeFloat(height); out.writeFloat(rx); out.writeFloat(ry); } private void readObject(ObjectInputStream in) throws IOException { x = in.readFloat(); y = in.readFloat(); width = in.readFloat(); height = in.readFloat(); rx = in.readFloat(); ry = in.readFloat(); if (rx == 0f && ry == 0f) { rect = new Rectangle2D.Float(x, y, width, height); } else { rect = new RoundRectangle2D.Float(x, y, width, height, rx * 2, ry * 2); } } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String x = attrs.getValue("x"); String y = attrs.getValue("y"); String width = attrs.getValue("width"); String height = attrs.getValue("height"); String rx = attrs.getValue("rx"); String ry = attrs.getValue("ry"); if (rx == null) rx = ry; if (ry == null) ry = rx; this.x = XMLParseUtil.parseFloat(x); this.y = XMLParseUtil.parseFloat(y); this.width = XMLParseUtil.parseFloat(width); this.height = XMLParseUtil.parseFloat(height); if (rx != null) { this.rx = XMLParseUtil.parseFloat(rx); this.ry = XMLParseUtil.parseFloat(ry); } build(); // setBounds(this.x, this.y, this.width, this.height); } */ protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); // SVGElement parent = this.getParent(); // if (parent instanceof RenderableElement) // { // RenderableElement re = (RenderableElement)parent; // Rectangle2D bounds = re.getBoundingBox(); // bounds = null; // } if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); boolean rxSet = false; if (getPres(sty.setName("rx"))) { rx = sty.getFloatValueWithUnits(); rxSet = true; } boolean rySet = false; if (getPres(sty.setName("ry"))) { ry = sty.getFloatValueWithUnits(); rySet = true; } if (!rxSet) rx = ry; if (!rySet) ry = rx; if (rx == 0f && ry == 0f) { rect = new Rectangle2D.Float(x, y, width, height); } else { rect = new RoundRectangle2D.Float(x, y, width, height, rx * 2, ry * 2); } } public void render(Graphics2D g) throws SVGException { beginLayer(g); renderShape(g, rect); finishLayer(g); } public Shape getShape() { return shapeToParent(rect); } public Rectangle2D getBoundingBox() throws SVGException { return boundsToParent(includeStrokeInBounds(rect.getBounds2D())); } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { // if (trackManager.getNumTracks() == 0) return false; boolean changeState = super.updateTime(curTime); //Get current values for parameters StyleAttribute sty = new StyleAttribute(); boolean shapeChange = false; if (getPres(sty.setName("x"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != x) { x = newVal; shapeChange = true; } } if (getPres(sty.setName("y"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != y) { y = newVal; shapeChange = true; } } if (getPres(sty.setName("width"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != width) { width = newVal; shapeChange = true; } } if (getPres(sty.setName("height"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != height) { height = newVal; shapeChange = true; } } if (getPres(sty.setName("rx"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != rx) { rx = newVal; shapeChange = true; } } if (getPres(sty.setName("ry"))) { float newVal = sty.getFloatValueWithUnits(); if (newVal != ry) { ry = newVal; shapeChange = true; } } if (shapeChange) { build(); // if (rx == 0f && ry == 0f) // { // rect = new Rectangle2D.Float(x, y, width, height); // } // else // { // rect = new RoundRectangle2D.Float(x, y, width, height, rx * 2, ry * 2); // } // return true; } return changeState || shapeChange; } } svgsalamander-0~svn95.orig/svg-core/src/main/java/com/kitfox/svg/PatternSVG.java0000644000175000017500000002430311345751075026522 0ustar moonmoon/* * Gradient.java * * * The Salamander Project - 2D and 3D graphics libraries in Java * Copyright (C) 2004 Mark McKay * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Mark McKay can be contacted at mark@kitfox.com. Salamander and other * projects can be found at http://www.kitfox.com * * Created on January 26, 2004, 3:25 AM */ package com.kitfox.svg; import com.kitfox.svg.xml.StyleAttribute; import java.net.*; import java.util.*; import java.awt.geom.*; import java.awt.*; import java.awt.image.*; import com.kitfox.svg.pattern.*; import com.kitfox.svg.xml.*; import org.xml.sax.*; /** * @author Mark McKay * @author Mark McKay */ public class PatternSVG extends FillElement { public static final int GU_OBJECT_BOUNDING_BOX = 0; public static final int GU_USER_SPACE_ON_USE = 1; int gradientUnits = GU_OBJECT_BOUNDING_BOX; float x; float y; float width; float height; AffineTransform patternXform = new AffineTransform(); Rectangle2D.Float viewBox; Paint texPaint; /** Creates a new instance of Gradient */ public PatternSVG() { } /* public void loaderStartElement(SVGLoaderHelper helper, Attributes attrs, SVGElement parent) { //Load style string super.loaderStartElement(helper, attrs, parent); String href = attrs.getValue("xlink:href"); //If we have a link to another pattern, initialize ourselves with it's values if (href != null) { //System.err.println("Gradient.loaderStartElement() href '" + href + "'"); try { URI src = getXMLBase().resolve(href); // URL url = srcUrl.toURL(); // URL url = new URL(helper.docRoot, href); PatternSVG patSrc = (PatternSVG)helper.universe.getElement(src); gradientUnits = patSrc.gradientUnits; x = patSrc.x; y = patSrc.y; width = patSrc.width; height = patSrc.height; viewBox = patSrc.viewBox; patternXform.setTransform(patSrc.patternXform); members.addAll(patSrc.members); } catch (Exception e) { e.printStackTrace(); } } String gradientUnits = attrs.getValue("gradientUnits"); if (gradientUnits != null) { if (gradientUnits.toLowerCase().equals("userspaceonuse")) this.gradientUnits = GU_USER_SPACE_ON_USE; else this.gradientUnits = GU_OBJECT_BOUNDING_BOX; } String patternTransform = attrs.getValue("patternTransform"); if (patternTransform != null) { patternXform = parseTransform(patternTransform); } String x = attrs.getValue("x"); String y = attrs.getValue("y"); String width = attrs.getValue("width"); String height = attrs.getValue("height"); if (x != null) this.x = XMLParseUtil.parseFloat(x); if (y != null) this.y = XMLParseUtil.parseFloat(y); if (width != null) this.width = XMLParseUtil.parseFloat(width); if (height != null) this.height = XMLParseUtil.parseFloat(height); String viewBoxStrn = attrs.getValue("viewBox"); if (viewBoxStrn != null) { float[] dim = XMLParseUtil.parseFloatList(viewBoxStrn); viewBox = new Rectangle2D.Float(dim[0], dim[1], dim[2], dim[3]); } } */ /** * Called after the start element but before the end element to indicate * each child tag that has been processed */ public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException { super.loaderAddChild(helper, child); // members.add(child); } protected void build() throws SVGException { super.build(); StyleAttribute sty = new StyleAttribute(); //Load style string String href = null; if (getPres(sty.setName("xlink:href"))) href = sty.getStringValue(); //String href = attrs.getValue("xlink:href"); //If we have a link to another pattern, initialize ourselves with it's values if (href != null) { //System.err.println("Gradient.loaderStartElement() href '" + href + "'"); try { URI src = getXMLBase().resolve(href); PatternSVG patSrc = (PatternSVG)diagram.getUniverse().getElement(src); gradientUnits = patSrc.gradientUnits; x = patSrc.x; y = patSrc.y; width = patSrc.width; height = patSrc.height; viewBox = patSrc.viewBox; patternXform.setTransform(patSrc.patternXform); children.addAll(patSrc.children); } catch (Exception e) { e.printStackTrace(); } } String gradientUnits = ""; if (getPres(sty.setName("gradientUnits"))) gradientUnits = sty.getStringValue().toLowerCase(); if (gradientUnits.equals("userspaceonuse")) this.gradientUnits = GU_USER_SPACE_ON_USE; else this.gradientUnits = GU_OBJECT_BOUNDING_BOX; String patternTransform = ""; if (getPres(sty.setName("patternTransform"))) patternTransform = sty.getStringValue(); patternXform = parseTransform(patternTransform); if (getPres(sty.setName("x"))) x = sty.getFloatValueWithUnits(); if (getPres(sty.setName("y"))) y = sty.getFloatValueWithUnits(); if (getPres(sty.setName("width"))) width = sty.getFloatValueWithUnits(); if (getPres(sty.setName("height"))) height = sty.getFloatValueWithUnits(); if (getPres(sty.setName("viewBox"))) { float[] dim = sty.getFloatList(); viewBox = new Rectangle2D.Float(dim[0], dim[1], dim[2], dim[3]); } preparePattern(); } /* public void loaderEndElement(SVGLoaderHelper helper) { build(); } */ protected void preparePattern() throws SVGException { //For now, treat all fills as UserSpaceOnUse. Otherwise, we'll need // a different paint for every object. int tileWidth = (int)width; int tileHeight = (int)height; float stretchX = 1f, stretchY = 1f; if (!patternXform.isIdentity()) { //Scale our source tile so that we can have nice sampling from it. float xlateX = (float)patternXform.getTranslateX(); float xlateY = (float)patternXform.getTranslateY(); Point2D.Float pt = new Point2D.Float(), pt2 = new Point2D.Float(); pt.setLocation(width, 0); patternXform.transform(pt, pt2); pt2.x -= xlateX; pt2.y -= xlateY; stretchX = (float)Math.sqrt(pt2.x * pt2.x + pt2.y * pt2.y) * 1.5f / width; pt.setLocation(height, 0); patternXform.transform(pt, pt2); pt2.x -= xlateX; pt2.y -= xlateY; stretchY = (float)Math.sqrt(pt2.x * pt2.x + pt2.y * pt2.y) * 1.5f / height; tileWidth *= stretchX; tileHeight *= stretchY; } if (tileWidth == 0 || tileHeight == 0) { //Use defaults if tile has degenerate size return; } BufferedImage buf = new BufferedImage(tileWidth, tileHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g = buf.createGraphics(); g.setClip(0, 0, tileWidth, tileHeight); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); for (Iterator it = children.iterator(); it.hasNext();) { SVGElement ele = (SVGElement)it.next(); if (ele instanceof RenderableElement) { AffineTransform xform = new AffineTransform(); if (viewBox == null) { xform.translate(-x, -y); } else { xform.scale(tileWidth / viewBox.width, tileHeight / viewBox.height); xform.translate(-viewBox.x, -viewBox.y); } g.setTransform(xform); ((RenderableElement)ele).render(g); } } g.dispose(); //try { //javax.imageio.ImageIO.write(buf, "png", new java.io.File("c:\\tmp\\texPaint.png")); //} catch (Exception e ) {} if (patternXform.isIdentity()) { texPaint = new TexturePaint(buf, new Rectangle2D.Float(x, y, width, height)); } else { patternXform.scale(1 / stretchX, 1 / stretchY); texPaint = new PatternPaint(buf, patternXform); } } public Paint getPaint(Rectangle2D bounds, AffineTransform xform) { return texPaint; } /** * Updates all attributes in this diagram associated with a time event. * Ie, all attributes with track information. * @return - true if this node has changed state as a result of the time * update */ public boolean updateTime(double curTime) throws SVGException { //Patterns don't change state return false; } } svgsalamander-0~svn95.orig/svg-core/src/main/res/0000755000175000017500000000000011562044260020637 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/xml/0000755000175000017500000000000011562044260021437 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/xml/about.xsl0000644000175000017500000000257610627134103023310 0ustar moonmoon About SVG Salamander

SVG Salamander

Created by Mark McKay
Copyright 2005

http://svgsalamander.dev.java.net
http://www.kitfox.com

Last built:
svgsalamander-0~svn95.orig/svg-core/src/main/res/xml/about.xml0000644000175000017500000000007210627134103023267 0ustar moonmoon svgsalamander-0~svn95.orig/svg-core/src/main/res/res/0000755000175000017500000000000011562044260021430 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/res/help/0000755000175000017500000000000011562044260022360 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/res/help/about/0000755000175000017500000000000011562044260023472 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/res/help/about/about.html0000644000175000017500000000076710662456060025511 0ustar moonmoon About SVG Salamander

SVG Salamander

Created by Mark McKay
Copyright 2005

http://svgsalamander.dev.java.net
http://www.kitfox.com

Last built: 2007, August, 20 11:23
svgsalamander-0~svn95.orig/svg-core/src/main/res/res/icons/0000755000175000017500000000000011562044260022543 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/res/icons/SVGUniverseIcon_32c.png0000644000175000017500000000127710627134103026715 0ustar moonmoonPNG  IHDR DgAMA7tEXtSoftwareAdobe ImageReadyqe<cPLTE> "+Ba 9q qq)222BB"QQ$Q 7"";0-aa&24 ~.IDATxb```d 88HP8?Nib`b9 S4@1UŰs as @{I%Gb2X  d$M @Jwh0KKR@@sHC AL⸤xI\v$8.? !"XYXApA 0;P (d2GBHTp1221B+@xE$v22 r3rK0FQ>6 ̌"l@P$@0700 d+ 1<`l DCpDl>m b``b`7\nV6> ;H@}*D3@!$@=  /4q qq)0-йCEIDATxb`d@)*"8 @ % AWN @ "|b`B@@CQ @ ,L <Ҍ,< % @ |̌ @쌌 /(/@@H+;77;0[Glf=IENDB`svgsalamander-0~svn95.orig/svg-core/src/main/res/res/icons/cursor.svg0000644000175000017500000000062310627134103024577 0ustar moonmoon svgsalamander-0~svn95.orig/svg-core/src/main/res/example/0000755000175000017500000000000011562044260022272 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/main/res/example/duke.svg0000644000175000017500000000045210627134103023741 0ustar moonmoon svgsalamander-0~svn95.orig/svg-core/src/gen/0000755000175000017500000000000011562044260017673 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/gen/java/0000755000175000017500000000000011562044260020614 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/src/gen/res/0000755000175000017500000000000011562044260020464 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-core/pom.xml0000644000175000017500000001455411537002112017651 0ustar moonmoon 4.0.0 org.sonatype.oss oss-parent 7 com.kitfox kitfox-svg-salamander 1.0.8 jar ${project.artifactId} ${project.name} SVGSalamander is a popular, small and fast SVG renderer and animator for Java. 2011 http://java.net/projects/svgsalamander Kitfox Studios http://www.kitfox.com/ http://svgsalamander.java.net/tags/kitfox-svg-salamander-1.0.8 scm:svn:https://svn.java.net/svn/svgsalamander~svn/tags/kitfox-svg-salamander-1.0.8 scm:svn:https://svn.java.net/svn/svgsalamander~svn/tags/kitfox-svg-salamander-1.0.8 BSD http://www.opensource.org/licenses/bsd-license.php repo GNU Lesser General Public License, version 2.1 http://www.gnu.org/licenses/lgpl-2.1.html repo mark-mckay Mark McKay mark@kitfox.com owner the creator UTF-8 UTF-8 kitfox-source-repo org.apache.ant ant 1.8.1 ${basedir}/src/main/java ${basedir}/src/main/res ${basedir}/src/test/java ${basedir}/src/test/res org.codehaus.mojo javacc-maven-plugin 2.6 javacc generate-sources javacc ${basedir}/src/main/java **/*.jjt org.apache.maven.plugins maven-compiler-plugin 2.3.2 1.6 1.6 org.apache.maven.plugins maven-enforcer-plugin 1.0 enforce-maven-version enforce [3.0,) you-must-run-maven-3.0-or-above org.apache.maven.plugins maven-javadoc-plugin 2.7 true false public http://java.sun.com/javase/1.6.0/docs/api true true ${project.name} API ${project.version} / ${maven.build.timestamp} ${project.name} API ${project.version} / ${maven.build.timestamp}
${project.organization.name}]]>
${project.organization.name}]]>
Copyright © {inceptionYear}-{currentYear} ${project.organization.name}]]>. All Rights Reserved.
org.apache.maven.plugins maven-source-plugin 2.1.2 org.apache.maven.plugins maven-release-plugin clean verify deploy
svgsalamander-0~svn95.orig/svg-core/build.xml0000755000175000017500000001530611371101253020156 0ustar moonmoon Builds, tests, and runs the project svg-salamander-core. svgsalamander-0~svn95.orig/java-one-2007/0000755000175000017500000000000011562044311016671 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/hotspot.log0000755000175000017500000000121610616703330021101 0ustar moonmoon Java HotSpot(TM) Client VM 1.6.0-rc-fastdebug-b99-debug Java HotSpot(TM) Client VM (1.6.0-rc-fastdebug-b99) for windows-x86, built on Sep 15 2006 02:26:51 by "java_re" with unknown MS VC++:1310 -Xdebug -Xnoagent -Djava.compiler=none -Xrunjdwp:transport=dt_socket,address=localhost:3383 com.kitfox.javaone2007.blur.BlurFrame SUN_STANDARD svgsalamander-0~svn95.orig/java-one-2007/doc/0000755000175000017500000000000011562044260017441 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/doc/links.html0000755000175000017500000000046310614346724021464 0ustar moonmoon Using Frame Buffer Objects svgsalamander-0~svn95.orig/java-one-2007/art/0000755000175000017500000000000011562044260017462 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/art/buttons/0000755000175000017500000000000011562044261021161 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/art/buttons/abc_alpha.psd0000644000175000017500000146346510616703330023604 0ustar moonmoon8BPS 7 8BIM%8BIM$ 1 400 200 1 27/1 27/1 3 2007-05-04T11:31:56-05:00 2007-05-04T15:06:50-05:00 2007-05-04T15:06:50-05:00 Adobe Photoshop CS Windows adobe:docid:photoshop:5708e77e-fa53-11db-86a2-f9817c882493 application/vnd.adobe.photoshop 8BIMGG8BIM&?8BIMA TransparencyAlpha 1Alpha 2 Alpha 2 copyAlpha 3Alpha 2 copy 28BIM TransparencyAlpha 1Alpha 2 Alpha 2 copyAlpha 3Alpha 2 copy 28BIMTd222228BIM 8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIM5nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM 8BIM kP OJFIFHH Adobe_CMAdobed            P" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI$RI$I%)$IJI$RI$I%)$IOTI%)$IJI$SOu=?9az6c~Qݳsw)u.ԩ7ke/m8άߵ\xf`xUƍs{?O{00UfZͣ.h&rpI[F})X\t]FOS\>;{\ӵ}x;\k7+_06vK1X^8U]:͞IN?ϪzmXXXƽcs\ sHXO+/Jų;/}S?;_w鬣ǽUϳzQOoIhoFBz[ūVV=Y,U}ޢS*=Kn,1 isYmk]DaTCt;knꙭYEO'cvn6Ywlvz:r21ʯ85K/fNRoQׯ))Wmavֶʛn]u[xy +ɡĆKc :YsV3G׺9+!Jr($wّ;m>Zr+e;!صԮ+͔z{%;i$JRI$TI%)$IJTSlbRvqhUu[ՅvoQ=_r4C em6ޠ{Scpz\9`U*F+>O8u2V`n7/UCWgSx[PnY?6U[m#[=d^v~NVk\[ԨSW,m69gq%==7U}5KŕZ!pǴ뚸.o(VEU䶀^(MZ[[}~r_FgE~KK@ j+`tb/:MmʅٴSc{ye@Usm.og)ּi쎞΋VVC}旵͹c27ݑ=T:VV'^Yw3]vzOfi 7^ZoQob312۲.yGfOzgftoln>E )ɵ>g}_e܌[Z+u<{6316.aQ^>3]Lwqؗ_OwѲ? 0 ѿǪO>dQVV;Ŕ^SckKYq7b9V7AjX;+^tсSoɣ"Ra:UfUNk3dW"61}?繘yT2\weS_kbJA`W;2>5Jmgz Uޝw[Ee2q /12=?jeo_ϫX2̵y9,:rﺗiccT(mƏc jJq3z56et\**cVz-f6}X*qU^u43fv.OKȰ:N=nqߐ0rqہ~dS]X˩Y9U~e ˰̹r{:~# ]g'.E ,ʺz,sԉ:nXuONu=95Y9zOّWo+BoAhnS2rX weU/jcaQ^- کck`'W{+ o%'I$RI$TI%)$IJI$RI$I%)$IJI$RI$I%)$IO8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM".MM*bj(1r2iAdobe Photoshop CS Windows2007:05:04 15:06:50&(.HH]dn:::8BIMnorm*(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp;i2 8BIMnorm(&|(ABC8BIMlfx2TnullScl UntF#Prc@XqmasterFXSwitchboolFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@YSz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh"??@Y@a2TxLrTxt TEXTABC textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntantiAliasSharp TextIndexlong EngineDatatdta << /EngineDict << /Editor << /Text (ABC ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 4 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 119.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 1.0 1.0 1.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.95294 0.14511 0.1059 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 4 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 4 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluni ABC8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpC$ ,$$   ""$"&(, $C9%4CQ_myúym_QC4% *@Vk μkV@* -Id~ ʱ~dI-?^}׺}^? 1TwݻwT1 ,RxÞxR,8bܳb84a㸌a4N}٫}N*\\**]đ]*SS=uu=VʐV)fޢf)/nn/.oo.$gg$WW>˅>ff?Ӊ?\\$rr$5Թԅ5@@GGGGBB88'ݭ݂'n˫nTT44 pҦp DDyߣyCCp٠p..SSuu!!99NĘN`ח`mmvv||}}yyqqeeS܏S<Ȏ<  jj@Ջ@tt9׉9SS\\RR33xx9 ڟk??kڪ ڟk??k9smmmmsyyݮyyKKKK;4444;c4444cKKݲKKyyyymmmmڴkkkk????????ckkkkc;;ڴmmmmss9yyyy9KKݲKKx4444x344443KKKKRyyݮyyRmmmm\ ڟk??kڪ ڟk??k\SS9׉9tt@Ջ@jj  <Ȏ<S܏Seeqqyy}}||vvmm`ח`NĘN99!!uuSS..p٠pCCyߣyDD pҦp 44TTn˫n'ݭ݂'88BBGGGG@@5Թԅ5$rr$\\?Ӊ?ff>˅>WW$gg$.oo./nn/)fޢf)VʐV=uu=SS*]đ]**\\*N}٫}N4a㸌a48bܳb8,RxÞxR, 1TwݻwT1 ?^}׺}^? -Id~ ʱ~dI- *@Vk μkV@*9%4CQ_myúym_QC4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)&.630/)))*)*))())'))***+*++-+$"!"!.*))) "!!!!((((((+)*)'*)*/59?/!""!"%)*  @pP @p@ pp`P@ @Pp p @`p 00 `@p`@0ఀp@@00P@P@0@p `p0P`0P@@` P00` 0P 0`pp`0` 00p@ @P`0 P @pP00P`P00P`P`PP000@P0P`0 PP`@`@p``p0 @p``0p``p  @``@p``0@ @0` pPp0 0@@``@`  p`@pPp `@  0Pp pp` `p pp`0 00pp0p `p00@0@ `P0 0 @0p@`PP 00pP P`P`0p ` P@@`000p`@` ` P `pp00p@p`0`@@@Pp P`@``0 `ppPpP0p `  ` Pp` p `@`p p0`А`@Pp@ P`@0@@08BIMPatt8BIMTxt2; /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) /PredefinedTag 2 >> >> >> << /Resource << /Name (PhotoshopKinsokuNone) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 1 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 3 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 6 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 25 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> ] >> /TextObjects [ << /Model << /Text (ABC ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 4 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 119.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures true /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms true /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 1.0 1.0 1.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.95294 0.14511 0.1059 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 4 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 4 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 4 >> ] >> /StorySheet << /AntiAlias 4 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 4 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 143.99998 /EMHeight 119.99997 /DHeight 85.19896 /SelectionAscent -100.44065 /SelectionDescent 29.99999 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -100.44065 0.0 29.99999 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 4 >> /FirstCharacterIndexInSegment 0 /UnderlineInvalidation [ 0.0 0.0 208.0773 0.0 ] /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -100.44065 30000.0 29.99999 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -100.44065 208.0773 29.99999 ] /Glyphs [ 34 35 36 1 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 4 ] >> /RenderedBounds [ 0.0 -100.44065 208.0773 29.99999 ] /VisualBounds [ 0.0 -100.44065 208.0773 29.99999 ] /Invalidation [ 0.0 -100.44065 265.67676 29.99999 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Orientation 0 /KernType 1 >> ] /RunLengths [ 4 ] >> >> ] /Annotation << /Width 0.0 >> >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>/0&G@63230/CJGS]SOJHCDDGEFJJJMKLMLNKFHF?<:<:79GC;HG>?9<;8<<ABCGIIMMNMNVZ^k[U\L@@?BEGLP881/0&G@63230/CJGS]SOJHCDDGEFJJJMKLMLNKFHF?<:<:79GC;HG>?9<;8<<ABCGIIMMNMNVZ^k[U\L@@?BEGLP881/0&G@63230/CJGS]SOJHCDDGEFJJJMKLMLNKFHF?<:<:79GC;HG>?9<;8<<ABCGIIMMNMNVZ^k[U\L@@?BEGLP881/0&"!/930+'%%%)((,,,/..//1,&&&&$$%$"$$$*(''$&&$&&$$%++-...//4:;D1'('&%$&(()+181CNbo{|zvtpnljffdb`^\ZXXVTRRPNNLLJJJLLNRV[agiuz~|vtplhhffbbbbbbbbbbfdffhlppx~zunnoic]YTQPPPRSTVXXZ\^`bdffjlnptvz|{obNCE&"0((&$$$ $ $  & $"$$%#'(,"&EGkyR CNbo{|zvtpnljffdb`n   !&%+-(" vhffjlnptvz|{obNC߿o??<P^ku||uk^P>),7L^lxxl^L72 ,F[kx xk[F, 7(D[mzzm[D(62OeuueO2.8NfwwfN.B^s7s^B &Kfy6#yfK& &Kg{0'{gK&Edy. +ydE5Ys' /sY5Gg|&2|gG%Qo"5oQ%*Vs8sV*!*Vt3tV*$!Rq0¿qR!'Hl/lH)6b| /¾|b6,Qs/¿sQ.7d2¿d71Kq+¾qK3!Xy)yX!1/b'b//7h'½h7-=k)Ŀk=,=l&l=*9k(¾k9)1g'þg1($`$Ŀ`$'U|%|U%Fu#ĿuF'.h!Ŀh.& W~"þ~W %:q½q:$\ \#:rſr:"W"ýW!)k!k) ExľxE YYhýh2rƿr2Ay»yAM~Ľ~MUƿUYY]º]]û][û[WļWPļPE~ļ~E4zûz4qúqf¹fSS7|Ǿ|7ożoXúX2| |2iƽiDùDpȿpJ  ĻJqqD ĻDkk-ĺ- ZǾZP^ku||uk^P>)&8GT`iqx}}xqi`TG8&".:DMU\cglquxz|~~|zxuqlgc\UMD:."9%4CQ_myúym_QC4% *@Vk μkV@* -Id~ ʱ~dI-?^}׺}^? 1TwݻwT1 ,RxÞxR,8b܊ܳb84a㸌a4N}٫}N*\\**]đ]*SS=uu=VʐV)fޢf)/nn/.oo.$gg$WW>˅>ff?Ӊ?\\$rr$5ԅ5@@GGGGBB88'݂'nnTT44 pһp DDy߸yCCpٵp..SSuu!!99NĭN`׬`mmvv||}}yyqqeeSܤS<ȣ<  jj@ՠ@tt9מ9SS\\RR33xx9 ڟk??kڿ ڟk??k9smmmmsyyyyKKKK;4444;c4444cKKKKyyyymmmmkkkk????????ckkkkc;;mmmmss9yyyy9KKKKx4444x344443KKKKRyyyyRmmmm\ ڟk??kڿ ڟk??k\SS9מ9tt@ՠ@jj  <ȣ<SܤSeeqqyy}}||vvmm`׬`NĭN99!!uuSS..pٵpCCy߸yDD pһp 44TTnn'݂'88BBGGGG@@5ԅ5$rr$\\?Ӊ?ff>˅>WW$gg$.oo./nn/)fޢf)VʐV=uu=SS*]đ]**\\*N}٫}N4a㸌a48b܊ܳb8,RxÞxR, 1TwݻwT1 ?^}׺}^? -Id~ ʱ~dI- *@Vk μkV@*9%4CQ_myúym_QC4%                !$')+-/023454310.+(%!   #'*-/1234321/-+(%"  %*/234430-)#  #*06:>ADFIJLMNOOPONMKIGC@;72,'!   %+059>BEHKMNONMKIFC?<73.)#  &09AGLNOOMJE>6,"  *5?HOUZ^adgiklmnnonmljgda\WQKE=6.& 3  '.5* "4I_urdVG:-!  %/:ER^juvcP<+ )=Unſ}eL5"  (=UoraQA1$  ",8ER`n{v^G2!  2Id˼uZ@* -D_{}jXE4&  '4AP_n}iP8$  &;Ur͹gK3:0Ifĸp\H5&  !,:JZk{ʺoT;& -E`~ƭsV;& 3Mk½s]H4$ $1@QcuʻoT:%  !5Nkй`D-4Onƶs[E1   &75EWj~¾jO7"  '=Xv§kN4  ;5PoϿ|yxxyz|ɷpW@,  (7I\pļy`G1.FbʱuW<& <5Poïwkb]ZXXYZ\_cipxɵiO8%  (8K6`uǾ~yusponopqtw|}iS=) !5OlѺaE-< 5Poιr_QGA><<=>@BFKRZdpưz^E.  (9La6xǻzqjd^ZVSQPOPQRUX\afmsz~|tgVD2!  '=XvèlN5! < 5Poȯy`L<1*'%%&'(*-27?HTbsӿmQ8$  '7Kay6ʾznd[SLFA=:86545679ZxïĩmO6!  5PoԼ`C* .Ea¦fH/ ,AZuͺv_J8*  /Gdκ~˳wY>(  5PoԼ`C* * '=YwĩiK1 %8Pkнv_I6'   "7QnȲvpvӼcG/ 5PoԼ`C* * "8SqƪkL2/E`|¬zaJ6&   (?ZyxicixŪnP7"  5PoԼ`C* * 5PnƪkL2 &:SoɳeM8&  /HdϹl\W\m̴xZ?(  5PoԼ`C* * 4OmũiK1/Fa~лlR;)   "7Qo ɱyaPKPayӽdH/ 5PoԼ`C* *!6Qp¦fH/ $9Rn ĬuZB-   (?[y ¨nVE?EVnūoQ7"  5PoԼ`C* * %;VtվbE, ,C^| θeJ3!  /He ѺdK;5;Kd͵y[?)  5PoԼ`C* + *A]|и{\@)   4Mj īqU<(   "7Qo!ʲvYA2,1AYvԽeH0 5PoԼ`C* ,  3KgɰsU:$  '=Wu cH1   )@[y!élO8)$)8OlƬoQ7#  5PoԼ`C* , *?XtiL3.Fb sV<'  0He!ѻbF0"!0Fb͵y[@)  5PoԼ`C+ - &7Ng˵|^C, 5Nlվ gJ2   #8Ro"ʲvX=((=XvԾeI0 5PoԽaD,0 &5I`yҿnR9$  %N`uɶjP8% 0IffI0  #8Rp#ʲvX=' &ZzȭoP6! $9Sq$ɱuW<&  %;UsտgJ1N 5PoƳvokijkmosw}ŷybM9(  *B_~ĨiK2 *A]{$§kM4 3LiǮqS9$ N 5Poôɺ|eO<+  -EcdG. 1Jg$`D, +B^}Ϸ{]A* 8 5PoƼñnWB0! /Hfս`C+  $9Sq%tV;%  $:TrտgJ2 5Po¿}fO;* 1KiҺ|]@(  *A]{%jM32KgǮrT:$ 8 5Po~gP=, 2MkѷzZ>& 1JgϹ~`D, *A]{Ϸ|^B+  5Po4ıpZF5& 3Nm϶xX<%  $9Sqɰ&tV;&  $9SqhK2N 5Po˻kWD4& 4OnϵvW;$  *B]|¨kN5"   3LhȯsU:% N 5PoǸmYF5& 4OnδvV:$ 2KhҼeJ3!   0Gbϸ}_C,N 5PoǹȻq]I6' 4OnδvV:$  $:TrϸcJ5&$3G`|iL3N 5Poɷ}vsqrsux{u_I6&4OnϵwW;$  +B^}ͷgP=0(# "'/;Md~ɰsU;% N 5Poѽ}maYTSSTVX\_djrzƶu^G4# 4NmзxY=& 3LhϹq]MB;757:@KZnѹ~_C,N 5PoʳjVH?9778:))A]}ʰrS8# 3LiѺ`D, 5PoԼ`C* ,#3Ha|ҼdH0&=Yx϶yZ>'  %;Vt¨kM4  5PoԼ`C* +&9QlūnQ7"$9TrԼbE-,D`~ʱuW<&  5PoԼ`C* *-D_|ʹwX=' 4NlèkN4 3MjŽҺaE- 5PoԼ`C* ( %:Tqӻ~_B+/GeʱuW<&  %;VtɻèlN5   5PoԼ`C* (2KidF.*A]|Һ aF.,D`ɸ}vrpoprv|˲vX='  5PoԼ`C* ' -EbçhJ0$:Us mP7#  4Mjλ}l`XSQPQSW^jyһbF. 5PoԼ`C* ' )A^~ƪkL23Lj z]B, &0(#! "&.;Mc}˲vX='  5PoԼ`C* ' (?\|ǬlM3 &;Vs ʲz^D/   5NkǮtX@- +'  5PoԼ`C* (2KhfH/ "6Olĭx_G3# !5NlƬoQ7# 63LiӼcG/ 5PoԼ`C* ( $9SpսaD, -C^{ѽsZD1"  '=XvԾeH05,C_~ŪnP6"  5PoԼ`C* ),B]{зz[?(  $8Pk̸pXC2# .Fb͵z[@) 5 %;VtʹxZ?(  5PoԼ`C* + $7OjɰsU:$ ,B\xɵoYE4&  !5OlƭpR8# 53LiԽdH/ 5PoԼ`C* - !1F^zjL3 "5Lfdzq\I9+    '=XvտfI04,D`~ūoQ7"  5PoԽ`C+ - !/AWpϷ}_D,)=UpƴubP@3(   .Fbζ{\@) 4 %;Vt͵y[?(  5PoվbE-/ $1AUlūqT:%  0E]xǶ|jYJ=2)"     !5OlǭqS9# 43LjԽeH/ 5PoֿfJ3! 0 #,8FXlθcH1 $6Kd~ʺueWJ?6.(##'+/220,%  '=YwgJ1Z,D`~ƬoQ7"  5Po¨mR<+ "'.7BO_qqU<(  (;Pi6tfZPG?83.*'%#""!"#$&),/38>CHJJG@6+  .FcϷ|]A* Y %;Vt͵y[@)  5PoǮx_J:/)&%%&')+.27>FP]k{DZ|aG1   ,>Tl6Ȼxmc[SMGC?<:88789;>ADINSZ`egf`VI:+  !6PmȮrT9$ Y3LjԾeI0 5Poͷp]OE@=<<=?ACGLRZcmzʶjP9&   .AVm6źyrke`[XVTSSTUWZ^bflryzm]J6%  (>ZxhK2W,D`~ƬpR8#  5Po­ui`[YXXY[]`ejpxʸqX@-   !0BVl7ƽ{xusrrsuwz}oXB-/Gcϸ}^B+ 1 %;Vt͵z[@)  5Poν~zx"y{}ȷt\E1!   !0AUjĽ}dK3  !5OlǮrT:$ V3LiҼdH/4On³u^H5$!/?ReyĿ´lQ8#  &;VsҽgK20,C^|kN5! 4Nm Ǻr]I6& - GPYaipv|}ysmg`XOE:/%  (2;BHKKHC<3)* &09AGKLKGA9/%  (5AMV^cgiklmnnonmljheb_[VQKF?92,%  !(/6=DKRX]afilnpqrqomkheb^YTOIC<5.&  "',011/,'! * %*.121/+&   $-5:62-(#  !',27<@DHKMOQRSRPOLJGDA=950+&!    &   "'*-/123454310.,*'$!  "%),.1346765420.,)&#            !       ".:DMU\cglquxz|~~|zxuqlgc\UMD:."&8GT`iqx}}xqi`TG8&%)>P^ku||uk^P>),7L^lxxl^L72 ,F[kx xk[F, 7(D[mzzm[D(62OeuueO2.8NfwwfN.B^s7s^B &Kfy6#yfK& &Kg{0'{gK&Edy. +ydE5Ys' /sY5Gg|&2|gG%Qo"5oQ%*Vs8sV*!*Vt3tV*$!Rq0¿qR!'Hl/lH)6b| /¾|b6,Qs/¿sQ.7d2¿d71Kq+¾qK3!Xy)yX!1/b'b//7h'½h7-=k)Ŀk=,=l&l=*9k(¾k9)1g'þg1($`$Ŀ`$'U|%|U%Fu#ĿuF'.h!Ŀh.& W~"þ~W %:q½q:$\ \#:rſr:"W"ýW!)k !k) Ex ľxE YYhýh2rƾ3ýƿr2Ayɻĵ~{xvtsrqpqrsux{¹|yvsrqpqrsux{»yAM~ɷ}vrqqsxıulfb^\YWVUTSSRSTUWY\`dipwǼyrlfa]YVTSRQRSTVY\`dinu}Ľ~MUι{l`XSRRUZdq˶veXOIEB@?>=<<;<=>@BEIMRYajtźukb[TNIEA><:9989:<>ADGLQW`jxƿUYªycRE=867:@IXkªw`N@61.,++,-./0246:?FMWbo~ǺwkaWNF@:62/-+))()*+-/148>FRatY]ͶfO=0(#!"$*4CWoһhO;-$!#%')*+,+*))(*-16>GSaq˾sfZOE=60,(&$#"!"#$%(,4?Od|º]]ĪpV?- $2F_{:϶{]C/ $)-13567766531/,*'%##$&+2;GVgzŵteWK@70*&#! !"#$%&'('&%$#"! !$*5E[tû][cH2! &9Rn̲uV<'%.6=BGIKJHFC@;61,'#  #)2?NauοxhXJ>4,&"  "$'*-/246787531.,)'%&+5DZsû[WuX>)  /Fb˰qR8# %1>IS[adfgeda]YSLE=5-& #,9I]t7ʺo]M@4+% !%).38=AEILNPQRRQOMJGC?;7336>LazļWPjN6#  (=Xu;ʯpQ6!!0@Q`mx|wph_UJ>3)!(6H]vzgUE7,%"'-4;CJQW]bfilnpomkhd_ZTOJHIP\oļPE~ѹ~`E/ #5Nk<ʯoP5!)1' !(/8AKT^fnu|yslfcchrļ~E4zʰtW=).Ea<ʯoP5!1F^vp_N=.!(9Oi Ƴ6q\I9,#%.8DO[gr|ûz4q§jM6% (WppV=)&:UrʯoP5!+C`*ʯqR7"$9UtŬsW?*%6LeȿpJ  з|^B- !0F`{{`E.!3KhʯoP5!+C`*˰qS8#%:VvйdI2!/D]x ĻJq ȮqT: '%6NjjN5",B^|ʯoP5!+C`*ɮpQ7"'=YyƭsV=( (;SnqD gK3 #)=WttW<'&:TrʯoP5!+C`*ĩkM4!*A^}ӼeJ2  1Ga~ ĻDk з|]B-  .E`~Ĵ~`D- 2JgʯoP5!+C`+վeH0/Ge˲wY?)' ;Tpk- ȮqT:'!$5MjξjM4"+B]{ʯoP5!+C`,̴z\A,#6Om¨kN5"/ Faĺ- Z ֿgK3#!)((?[yļaa¸o|üBB ǭpS9'#$5MjélN6#+A\zNʯoP5!&;Urr^L(%8RoNʯoP5!#6Nhþ|kZJ<2+*.8GZqƪkM32LjǾ00ƽ3Nǿ00εz\A, #/EaӻbF/ 1Ie9ʯoP5!0D[r|oaRE91,+0:H[pfH/"7Rp00ȿNaºBBƬoR9&$$6NkĪmO6#*@[yNʯoP5!(9L_p~{si^SG<3,)*0:H[pսaD,%;WvŻBBanŽaaվeI2")$=Xu̳xY>)$8QoNʯoP5! -;851,'"".?SjδvV:$-EcZZúy|ûվeI2"*>%Xvʹy[@*$8Qo8ʯoP5   "(-0344320.+(%! .?SjͲsT8#.HfȾĺ|}wwεy[@,!0FbվeH1  0HdʯoP5   !&+/1240/-*'$ +;Ncy̱rS7"0IgƻwwĻ}}ǿYYƬoR8&%6O&lƬoR8%*?ZxNʯoP5  '.49;==<;9741-)% '4DVj˰qR6!0JiĹYYĻ}}Ž88սeH1")=Wu̳xZ?*$7PnNʯoP5   *5>FLPRRQPNLIEA<71+% #,8GXj~˰pQ6!1Ki·88Ļ}|ļʹy[@+-C^|ϸbF/0GcNʯoP5! *8FS^fkmnnljhd`\VPIB:2+&" !%,7DTfy˰pQ6!1Kiú|yļūnQ8%!0Gb̸fJ2!)>YwNʯoP5!&6HZkx{unf]TJ@7.($"$*2?N`u˰pQ6!0JhùyuûԽdH0 !2Hb}IJfK4!#6OmNʯoP5!.BXm|qeYL@5,%!!%-9I]r˱qR6!/Hgumü̳xZ?* 0F^wſzaI3!.FbNʯoP5!"5Le~ufVG9-$!)6G\s̲rS7"-Gdnaļ88ŪmP6#-@UkmXB/'=XwNʯoP5!&:Tpǿp^L;-#'5G^wͳtU9#+Da·88ǿaNĽXYӼcG/'7I[kxzm]K9) !5OlNʯoP5!(>ZwƺvbM;+ '6Kc~ϵwW;%)A^}ĹYYŽN3ſvw̳wY>(  -;HU_fknopnlg`VJ<.! .FbNʯoP5!*A]|ŶybL8();RmѸzZ>''=Yyƻwwû3{ĩmO6" #-7@GLPQRSRPMHA8.$  '=XvʯoP5!*B_~0˻w^G3#.C]yӻ}^A)$9UsȾ|o»YZӼbF.  $+159;<;961+$  !5NlʯoP5!+C`.λqW?+$7Ok־bE, 5OmZZƿoWľ̳wX=(  %),./0.,*&!  .EaʯoP5!+C`,̷gL5#-C_}¦gI0 0IgŻļW2aaĩlO6" !%),./0/.,*&! '=WuʯoP5!+C`+ƮvY?*%:TrƫmO4 +C_~aa2tĽBBӻbF/!(.37:;<;:74/)" !5NkʯoP5!+C`*һdH12Ki˱tU:$&(&0:BIMPRSRQNJC;2(-EaʯoP5!+C`(ūoQ7",Daи{\@)!5Nk00ûZ-~00ĩlO6#(6DP[djmoponje]SF8*'ZyɰvY?*(;Rl9i 2{ ʱtV<'%9Sq6̳wX=(,C_}ʯoP5!+C`(ƬpR8#*B_~ҼgL5".BYr8ü|2X§jM4!+A]{5ӼbF.&:UsʯoP5!+C`)ӽfJ1/Heǯw[B-#3G^v#žXoѹ~`D- 2Jf5ĩlO5" 2KhʯoP5!+C`+Ȱw[@*"6OmӽkQ9'&6Jaxo7|ʰtV<'%9Rp5̳wX=(+B^|ʯoP5!+C`-ιiN6#(>Ywʳ}aH3"(8Lax û|7R§jM4!*@\z4ӻbF.%:TrʯoP5!+B_-оtYA,0HcªtZB.)9K`uĽReѹ~`D-1Ie4ĩlO5"2JgʯoP5!*A^}/ξzaI4#':TpϺmT>+)8I\oƾe-qʰtV;'$8Ro4̳wX=(+B]|ʯoP5!)@\z0ǹ|eN:( 1Gb~ɴhP;*'5EVgy*q*4z¦iL4!*?[yZӻbF.%9SqʯoP5!'=WuȽzeP=,+>Vq į}eN6:*%1?N^n}'z4#D~ѹ~_C-0HdYĩlO5"2JgʯoP5!$8Qls`N<-!'8Ng {c6N;+!+7DR`n{$~D PɯsU;&$7QnY̳wX=(+A]{ʯoP5! 2H`xwhXI9,!&5I`z Ѿ{6dO=."&/:EQ]hs}{z}!ºP WiL3!)?ZxWӻbF.%9SqʯoP5!*=Rgz~sh[NA4)!'5G]u Ͻ7|gSA2& '09BLU^fnu{~ysmga^]bl|»W [и}_C-0Gd1ĩmO6" 2JgʯpQ6! "1BScpz"{uoh_VLB8/& !*7H\s ϾkXG8," &,4;BIPV[`dgjkljheb^ZUPJFDELXk»[]ʰtV<(%8QnV̳wY?)-C^|˰pQ6! &3?KU]cfghgfec`\XRLE>70)$ !'0=L_tr_O@3)!"',17;@CGJLMNLKHFB?;74114=K_xº]\ĩnQ9'-B\y0ӼeI3"+?Yv˱rT9$ &/7?DHJK JHFC?;72.)&#""$(/8ETex ò{iYJ=2*# !%(+-02454320.,*(&%',7F\u\YkQ;+#"*9Oi0ŬrW?.##.@WsͳvY>*$).246765320.+)'&&')-2:DP^nȹtdVI>5-'" "#$%$#"$(/:K`yYUԾnVC5/1:I_x/ηgP>2-/8G\uз}aH4&"$')+,+,.049@HR^kzreXMC;4.)%"  !"#$%')-3;HXmžUM~wbQGCEO^r.ëzeSGABHUg}ԽmVC6-(&&'()*+,-./012468;?DJQYcn{Ȼui^ULD=73/,*('&%&'()*,.036;@GP]mĽ~MAyŰtg^\_hv)κ|la[Z_ixŮ~iXKC>;::9:;<=?@BDGKOSX_fnw7Ź}ri`XQKFB?<:866556689;=?BFJNTZblw»yA2rͼzy|*ɷ~xw{λqf^ZWUTSSRSTUWY[^bfkpv}6ƻwoic^ZWTRPONNOPQSUX[^bglryƿr2hɻ)ɼɸ}yvtrqqpqrsuwz}6~yvspommlmnoqtvz}ýh YĽ*ƾʾ»Y Ex*ýÿľxE!)k &!k)"W "ýW#:r ſr:$\ \%:q½q:& W~"þ~W '.h!Ŀh.%Fu#ĿuF'U|%|U($`$Ŀ`$)1g'þg1*9k(¾k9,=l&l=-=k)Ŀk=/7h'½h71/b'b/3!Xy)yX!1Kq+¾qK.7d2¿d7,Qs/¿sQ)6b| /¾|b6'Hl/lH$!Rq0¿qR!!*Vt3tV**Vs8sV*%Qo"5oQ%Gg|&2|gG5Ys' /sY5Edy. +ydE &Kg{0'{gK& &Kfy6#yfK&B^s7s^B.8NfwwfN.62OeuueO27(D[mzzm[D(2 ,F[kx xk[F, ,7L^lxxl^L7%)>P^ku||uk^P>)&8GT`iqx}}xqi`TG8&".:DMU\cglquxz|~~|zxuqlgc\UMD:."svgsalamander-0~svn95.orig/java-one-2007/art/buttons/abc_bg.png0000755000175000017500000003005110614346724023074 0ustar moonmoonPNG  IHDRdÆ pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F%FIDATx}{|S;9&Mzo-RKG`܆2s"EOe8}H+:/H򚢔6'LuN[t0ZE\)visiI$9iNri y^}YK{ssy>I!ˏRH!,dGxl~3އ}~, ͓~_ EnPZJA~ ㇞zN10$ F xs>֬l .Bi)N(JQP M}"!II,>z>?dSng`BŒ2 YRL/PVFa, 3("pfd'cbv qC- r9 W&CE=O&C,6˷P= }gx`F޵: f͔aFs(̜)Y|hr--|Gx2( JhR|A@L )^\A׋0|hs0.gQXP~Mr9.&Md2h-Gh9^/nwͥ(\P`R2r9) e |N00 =rr3zFƑ+Ey 2,\(Gy,En!nxe, aB]`d8vc mn7M.U`b9V\`,̤&ȡ24ªB&񵴴 "$|pӉN'y<XTSI^ osoE6Di|{[DC0W,88tF߾N|W"Hq`v9w0)) T*|Sⴴ^*4{60DeVR`KSG{u`uMcJ*tjN s:lݎEUbJ,\$KD ')4n2i4NYI`ՊCCd)-pǝ4~ABq _ps>)a|oʔl)L,xv {-W?[oqeM[h9 S|?=4Q*S+.Xg)M*|}"HS=bɶe>M hS/~Zl 9?WRqaA~ȎO>[ u jSvʹ3&Y>gϖTIͫ$ ~C?(OJq{FnjSyx3 vLi6ş;WQ_On|7F 1WC4U^0,>~m4b<ܥB'T_M>˅O\Htܛ Ѧ _  ĢHV('AZzQsgP0$F׋N'z<8r S>ODEX&C\yJ%AK׋''̞-C/ *N(A?_J17//$=4%/Ʉ^o M ٳɂr7mC-SdNɓa2>!ɗV\d1~@6;j<].z<'PUU%ӧOGGG",eiŤPRR޿h4ȄWLrrM:aaĉ’TUU ,F1ա!lYZ~!- -U(q;ts;ݠ.Ȣuuu;Zl۱[MMM 733Q9*Y^GrWWWGdE]]jkk+KvvE;!G9 q#/ת{QѸ;HW1*;[:zP]]444,t8G455iL555,,P"Q(U("\KX֖5{#G^|7Dؒ?@= ,% ,Z׋# v UUUhii-zX1Nw7/QSSӧOz~Acc#F#gA ^;j((\ۇ ,Vr >YcAThNݜD|UUUkIɢ444`ݺuׇ/(q,9\NÎ;D?7&`. %[ߩբLzza0H+S0˲ŋnlsUX+&ĮM^`Euu~HmQ;vp 7~9:Gccc /))zfL2 #,xtQaਸ਼Oڡ K1򪹹9l$htwq o?A?U'9F R]]͓Y9[W< i5YZN ^s#b͔)%##&rnr8˓.i5`ѭ8"Jwq̜yMsE~?ޱ4fgK.jX@ *q ,mDr ؞e吝ǦMC[qq$y-xwlS/~ʻQ$S^G8?$t@9+ܰџpD$NLkq:Qo6XrTgdK/Mn_,^Xl?^gGB~mO yE:2ђ+V$-96[Oc[N.4PV7~˛] $IQf hB~T$yE8555U:9X( yy\"{Gw[22P1A(WL&%}UԤEdPWWpBGoT4n!"iKC=ܙTc;޶]]ٳloǗΞ.<`0ʱʫhVdʬ:B҈fkR's25^DY.vl2Pv E,m۶Bhn%v ɳЍd8'XqKo/A!k՘SEXt`*!Z5$qKo/ Q1Ȧ($.ƾdM*,c4bry Z}ߕɊ C[M   0~?~rd3y% +5h)L766M2Yc`2Eގ;ZSMf& BrMh&|KuEyJS)0s; ^4T*Mx5{ckTdsS_u "eȡR-ԩ’#k1u!T˸mInq:Z̮'bO& Iuqy.Em:#AsJA9ݩM KPḑq{S1an(JI|)a92/]H {ӥV_]JcuR5 wAzEG"!}?QeQSS455 TVVW!drL|pIb1ؒG!GҤefcƖaXPF49$X8C./A^^}B^^='!?HMNj˕"2,񫩩 ۶m\lu/y33G6 GM66$u_59o cR8yr v_Yܜ:H; &#'ɰ+-"[ )k]] *sx>hR-R9ۭߍ[*QGt$ 2KȲ;zwӆPGF3ϻNePJȻN5"\,'$/Lx="ѬJh?HNDYmcQ愑$ s5W'.AI^KlKYf pB6pf;\wҮLR``D XyE.%a$+z^NfVUU'Z ܳllZ.IȖOCR K\@[1OM8a&HTHOE }@24sb f= 67KIʨ#iۉ$WgO\TEa)Wa­dc/TDQ(Ȧ ӧOxP*4x^"{UK ܦK RP0,z<\LgJ0pJ82y%ͺJ}Cttt`ռy(26dN^+ރV@.O\'ygΤ!KrsQ60õ)"{+=}?MF+N5 %$c54SX:0u*KKvQj4+HB-_Q@rܕm#Y0AJK 0!{ }@vËWc9"_/Z-Q`6 D۸-p 'ISȵexמۉ\,'pᰅ8h&&qV뾄> zNbX,HvP.`[N$l ;hN 5|#/g?ָ(1z8A>k׈YNH弐Xݫj^:0+p8@Qa;N#kfKGEU993;VH&hl`N|F,'dHR`BQ/oZ^HDLN=0rg+z^{ 6K$^,7i#=*.TŒ$oۻNJ&^en,8݄=kq -qԺf-G~ehhAfd }}((x,2΅)ՎE^^:bFs!KVL"+lIN ^L&MOGiģil*z?lȠL*8g!3Str|7 xӰy_Mlwݽ>_lφ5~\ i=FKhי2+^g_4c,hX~xʈ~cѳcNO &MGn|@`H.p(ۆD&RyglEmtu}v~g-'*`h^A ɯf xB{HL֥x֥ah(6 ߎr#q#a,0px,ߏ~^i֡σ hCpBׇ;b"{WV*NQ>2`FˈS*qFNQfxdx̫T'׾ AE7 FPKXӡ{t\P;ZS*9˒MQT/wtvC,CX%l럺A=wGj,WJMjBٙ3+Or&Ocig' Omr~ϕ ԩx1?whaH脩NHc H_l͔)#[N\œSQ8 4rbVvq nބ)_qXՅl\~ҔVNZ].חHOun}#GII "j",OSSN>Ħ'6ff NV+Yn]k \tHa WڒcC|n<8ZPbqvrkv6ҷwɫD,FIEAkk+*++yc ޟ:5!ߏŝI۶mm^kG_lN|!??!ꪪO3>-4t"e}Q;Ecc#֭[-ND_D=='wy4U ,3)ybUʨ(Hة++~=Q^MD%6zj9^+,"@WB.ÆCҍxUIo7p7tr)nHžQ$FBB1!- EL Iᥗ¿d㛌: x_akOLͿf* =pS5˅ĂM-F#;K$:::P[[;>R[V"߳Z_zl(#cTӠU*Fǂ PUUqtXNkk+&l9?Z 9^m5꤇hxu8LV$|K"t1*BkĀuz-:fdU yp~?:duP09rtJx\:χK rrF強X 4VT4&0#6ffrq߶pQ7(XDXь SNjfsBF k32N,MQcݏۼ&H@۬p8/qÔ)ؚjwłGغEɤc}hi }k32f88ppdfET"#)JTb.M2;6Zxj5YR)aZE420 6 MI4X<Ab>:6k( [] c.N\zMsR)evLƕU*y $W`5@Mᗾ4:uaQ;~k~ʴ427%cpRxgz=:ӰHY~7΍u*7ffN 2{; wp<7£qՒm %N<VH&Lܔ*X,xbppPGq{5GǼ^gQPLJRM Xx|pp٤se_/3xc]R9J%jK!ol68+OK߾nl9AXzŅsuI )%4Ny1x!ܔI#0 N<7 צ8P0g42bVZ-?WhsANj/8/#B!vVtW&7;i2a$=hWBP^htohtQ S/5¡g%24,SRdocՊ6[CYYR}%n%E 'AH:W\ B}4TXRԉ/Qv48&`)( XyknR&4}Q=n;%hT8- j4X.I;xj 0WP]& AXX,~}݅=hjr_\ Ƣ1)Xq`IQ@eKɱz%'Wk$s`͍'ӥRT4*h_iU*GOap¿N ~Y?(-)&}DO}ˍްN~(r) +TL\'.n|vBV rϷ((^0"H(Μarԋ#8r6IR(EQ4&MZcdzqけa˅AQ&bF XH .µ4A/-Ghi'Nxa2wJh) d2R|!R Idqvݰ|8l&-v@(: \ ٤#Rz>?dSm'xM)\8fC\̚)P5Sef΢+G 6>|1ɇ>;muZ.P\"N+99eR V?fA} At ܎_ZJA.dR )LXlc?O1p:N(rɈYz)B I 49ļ>IENDB`svgsalamander-0~svn95.orig/java-one-2007/art/buttons/d.png0000755000175000017500000000727110614346724022132 0ustar moonmoonPNG  IHDR>a pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxJQD:OtQ.yB.wAN,;%] 'pQf(B((73LΜF.ƛB@ @ @ @ @o߸7ܭ7""]<ҿ[vT?-+"NL,+"T:*w -jyվ~*oqgU.դ\ŤLebYat'>81{mὌ967P\0"Ļ_r&[IΊ!evFև$;dW+R,T;~<+3= #X)]WP4?*kC|+[4?~SV`rt\NC]t9q.7=agQUbմ!i*@_K`}%'X !?tG! b}v{Og/@v3@:W0X1#c裠ATkl;Qn_v>4vKu|P=q>Z ~ǿ,+!RheuV/ .ٙ*T:.Am>v pzײ"@cNˊI~Ty?y^CV:m&fr5hPw7ۻto,Bvm}H>%%4@vT2O@q}ljfx-w m[{kFп[ @ @ @ @ =9cZ/`(IENDB`svgsalamander-0~svn95.orig/java-one-2007/art/buttons/abc.png0000755000175000017500000002702010614346724022426 0ustar moonmoonPNG  IHDRdÆ pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F#-IDATx}{x%ے|QL 9'B nX(-6M%B9KvKӐ,6)S!PnU7ns4eYN>Ldi}{AYd! -TH-.]x@fo}bg [.`R(a^!߳wi<XB}) Ӂϩb,aI%A {E-EaC~>n0Qs(x;:,<,A!}ZaC~>nO8Efl$FGwta%MkXlk<< h IeZ ſ{a:hyEv0Q!rXo4B2>/fz- ;aMuN[<'7d:Yvp년M%y f vL jYX;Ml" QrY.8h9MͶ Kb(P! YxӉWnr6;h9GvONTY,m a83~ (\'Mahw~?`Œ a D"8 C!e0hfQѠREeNzBHO;wGt;Ѫb=z KT80x~7VR ; !?FGap$Hh'p]n& E5$+| b׋~|%Pun4p?׾xAfA,6[-kT~ 6LHc\q 3,$;:Wܻnr?U1AT^Zy-Q;].p)?ƝD7^G"|guZ®rqRT2 l2 X2!OT^q6)Y40xkdq1޺ v~GMM mۦth,,w==8`z*+SL'yH7zFR Q,{[,#yER~xϠȪ\<_Z*":/qD23D-VJPXO/0e}eˏ*jY"y @>0Ѳ%c&#H% 3DU ~'ɱ4(q!j1 H,c*I3Qf"&G@$=c3ZuYAKYH\R)!SmXM+#sIf)yd5i<y^i 6VRnFҞŪàV }>`$HVZ-Q=Y"R/Kw4+4"&ZI++wN@Z=^\Rdue< nKz:j)jZ]6jQ.[Ri <,,+ .g`lܻ7`;\.ٳoc%^S2k(ź^u644pW!CrXQѬ?^ T6| bmo/#n̲רTR;1z­g KQTVk*+v/Z;PTzdh=DXx?FA͏hVaߏG |N m۶I2ۉٰx<O$kg)?Aߏ2Tz| ѨQ{h>zTP 0 nǽDBT 5( ][GFT_a0\?ZZfbllB/|xQODK6WJrFg$eeLMYo;wJZqb4wr!lcc_:@ݗKQ|jZj=mȇhk>ۄǃH2 ROF6x 5\&S' G^޵?IrH`k綎$$> Zɬx)E9ŭLV6mRfJmSw]zt8Xp >/I1 SX|,{-dU$.nDRw(J 32֠bfڀ=0L:v$JqʬիWhoo-\ïJKQBb%|Yb0_/RISS*,~mu8l `"w0q,A99U(+kaO 4(+kANN&' 2,ab>۱m6AU׸bBw9A ntw5j~~7lZg0LH8deZᤛ61߼#󦿀**e7%?#Dc& RID6h\d4O|NU&ɬd 5Uعs(-nwHn5KPR,la&üNB~@n)AyyWcddܑQ*AddV$,NzS+|%ٸ~UMMM|+gk,N]rҟPp,B u"Q>cM jǧbhDɓq??ݵYuuuq_i׉$W{ 4uIvv9s؜VZmJ h&#DRd"6,Z(B)qA ) sAj.SZx77IoyI\rM+NF#WJ1Ѭ_eXQ9؏SΊ|݊XZ,gx퉑i_`<'+z^% 6i (GF\C"p9CŻ=(&tq1VN(q *s.3O)7^rS DI-QX߸F16f@=+Xb`_R"QڸqcHR#VB YApn"ْ>֥/\tzYNQxb+za9zTŝp 8p{Ţhȴ.@@ѣTsD3]݄>]JKQ*ݯzLΓ 2+Yg_4Mt1(`}4~}4#W} kVRQt''.)DA4zZbu`Ͳz{>AE_;޿cEENƉJ49(+(}h 2'׺,\,Δk] @`]ZGGސ'^R"}0>_ۋ/oG> ta_ޏ{|rB_IQ؞@ɍh+`Kp:4>JĐ_tsQ^_ q=VkFShtH/G0xT_2!> }Vƒ?7nKee sbmH! xM;= =aɓ씔\I<7Y쫨Cv}o#l[5'^/6 ҕ"W¯sX(kΜ!01) L$GsQB&v ;By g\'.f̙k02 v˒CRRD\XٔYMCC|1Ձu:#,4I)+BY$7xjMiJ;Vk4 cߥ:+n&Cr+~`4 `kQ2%&t* q.$~$ \8t6dàihHxZu~!^2o>$ ஁b[axjW FAFZ F#,.W Mp+n~/ ]?bP'5nTχ `8EFV\\@gt+J%R%B #l`󙆆v-0Sct`<'6ܚwShFc»srdP*Ί|` q3d ü gmHlҴa>(t:QWY9w4ߤUjd"a`PvKXO7O) W bY#):.(T2'GP.Gw(ᰀ f$A^).aVH6:IG极]@:lʬ~CUUUhmmI6)(q SAʷf!cBYryxbddƿ`j^:HR O{{;曘%6]]]*-NM&A9ϦM8kJC \Җt甞>v+0[BǒX~ Q?O8}{皼JR*sH L.J PWW'ضc.c\q`m۶6\r[;2ΕHNߔdS].<"LO<0bGɨ&:< \z6 yEʬ!2Ͳڕ 6m^¯JJ⮞a_w}}1 ߾nܷPLTU`0-ɱA?> O78I6Dy2K\2pƍrV| Uipp{Y{Չ\O<:,.NZraH YSL:Ӌթ:qGad&`G>"U(dY^Zj(JN'^bRQj)*rxF0 +4e#3LXKhdq񬬼bf P?i8&X](zATQ<2<,n<9>3Nb= aoWRT}l  xAӏ(9G-&G5J1Q)f/YZlXpsA48$O;RA3sMbI;΁łi>O9MnMyg Q6Bz=$" }>ls8p;:Ai%bɆKY,CawtRAӻRYC$L,Ny ĮVDhi2I`4W\.HD%M0Bbh0NIqW,6xaO`$zhFRPqs^xr3Rs Q8b(lz1%Y(y;:kcut|9C(='5hĵyyYRc׋|>CChO9Rv?Lyy6//N|YߏG-Ev9h}&,?9 L4"7"77k]h%> ׋ x ~=9C(EY:uU99XIQ͝aaKal6 -oxALs 2:7Xj5VRVR.(,ebh_B<#N%2\`=k\.QbKz,L,fk(p_ {a^AΕ>"AY.gK*'Kt:i4XZ99XYFq*18Q 0''a 1Չ&x$sj& Zj|oJ5c g|g#~:o|fJ1Q1{{d%̒,Kkzdb/ 2L99j {st,-<[1լ,LdNݬpl.ˤ&y N-D%A+p{2'"I^LB&R,A҇xm `r(t$,X5169:IENDB`svgsalamander-0~svn95.orig/java-one-2007/art/buttons/d.psd0000755000175000017500000112667310614346724022145 0ustar moonmoon8BPS2R8BIM%8BIM$ 1 128 128 1 27/1 27/1 3 2007-04-27T03:46:47-05:00 2007-04-27T03:46:47-05:00 2007-04-27T03:46:47-05:00 Adobe Photoshop CS Windows adobe:docid:photoshop:5d5f654d-f490-11db-82d6-960b14df6832 application/vnd.adobe.photoshop 8BIMGG8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM8BIMI Untitled-1nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM JFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I%筥$I)I$JRI$I$$I)I$JRI$I%筥$I)I$JRI$I$$I)I$JRI$I%筥$I)I$>u,ޙs#/NC][[`L9E?#$1ā,з}%}3t켋1쵵ݳ:=hF9.?g'7)Q-㽢_SIy%XApvqaGM˧2pzU,<?.R~nqE80ό~q M$YԒI$$I)I%筥$I)K?_\ĖOύVy_/>Noݕ7FSgߛ%cC+:Z,AWt{YԺs6^UȪ.mZX\_V;(uy>ϗaDNB#&2)l9 _;)cyunEWy/uX}1wZrb":n?zn*I$I$SI%筥$I)K?_\ĖOύVy_/>Noݕ7FSgߛ%cBGۏgk+=ŮhbgAxup2?4u49ߥwmCbFaT#@ⲇYN3O]`^[џw7k@W0O';>bcbIg/RI$I%筥$I)K?_U0;sjm< j1gŔF9d %X!o[:ճڮez[ !O՝ޣJ?A rͭsֳ}P|nZZ?Tj2ޜ_-r9υ,1g3]>f/7I{n33Ǧ/:Rn]{Z}ϩY_' t?Qħulk\79\QŌ䰎\KOSO5ʫmu24hօ$YKԒI$$I)I%筥$I)I$JRI$I$$I)I$JRI$I%筥$I)I$JRI$I$$I)I$JRI$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM".MM*bj(1r2iAdobe Photoshop CS Windows2007:04:27 03:46:47&(.HHm@2,8BIMnorm((Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp)-ZV8BIMnorm(#|(D8BIMTySh"??@D@V2TxLrTxt TEXTD textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntantiAliasSharp TextIndexlong EngineDatatdta << /EngineDict << /Editor << /Text (D ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 71.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 86.39999 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.92941 0.10196 0.10196 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 4 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniD8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@   DUwwݻwfDDw3DfDwD3DU3DwfDUfD3UDw3DDD3wDwDwD"D3DDwDDDw"DDDD3fDwDwDwDwDwD3DDDDDwDDD"wDw"DDfwDDDUD3wDUD"Df3D"w3DD3Dw"DwD"D݈"DwD"wwfD8BIMPatt8BIMTxt2: /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) /PredefinedTag 2 >> >> >> << /Resource << /Name (PhotoshopKinsokuNone) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 1 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 3 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 6 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 25 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> ] >> /TextObjects [ << /Model << /Text (D ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 71.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 86.39999 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures true /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms true /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.92941 0.10196 0.10196 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 4 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 86.39999 /EMHeight 71.99998 /DHeight 51.11937 /SelectionAscent -60.26439 /SelectionDescent 17.99999 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 0.0 17.99999 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /UnderlineInvalidation [ 0.0 0.0 47.95091 0.0 ] /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 30000.0 17.99999 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 47.95091 17.99999 ] /Glyphs [ 37 1 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /RenderedBounds [ 0.0 -60.26439 47.95091 17.99999 ] /VisualBounds [ 0.0 -60.26439 47.95091 17.99999 ] /Invalidation [ 0.0 -60.26439 82.51059 17.99999 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Orientation 0 /KernType 1 >> ] /RunLengths [ 2 ] >> >> ] /Annotation << /Width 0.0 >> >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>      ٫||]>>>N|>||/>/|]N>|/||>|]|>]|||||||]/N|||m]|>m||]//|]m/||m>>>N|ܭ~~^???O~?~~/?/~^O?~/~~?~^~?^~~~~~~~^/O~~~n^~?n~~^//~^n/~~n???O~                                        svgsalamander-0~svn95.orig/java-one-2007/art/buttons/abc.psd0000755000175000017500000122355510614346724022444 0ustar moonmoon8BPSdB8BIM%8BIM$ 1 200 100 1 27/1 27/1 3 2007-04-26T05:12:28-05:00 2007-04-27T03:24:38-05:00 2007-04-27T03:24:38-05:00 Adobe Photoshop CS Windows adobe:docid:photoshop:9c45da34-f3d5-11db-82d6-960b14df6832 application/vnd.adobe.photoshop 8BIMGG8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM 8BIM@@8BIM8BIM;dabcdnullboundsObjcRct1Top longLeftlongBtomlongdRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongdRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM PJFIFHH Adobe_CMAdobed            P" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?I%筥$ދНXLm o;2r}hI96~A~}·7esw1 1?2zc/b×4q@?ޗ=?Y2jko;gq5';cCgzn[\{zF2ed8OWXݍ m`55hO/O)T?9L.HEѿ+G~Ugjg?78ښ?VI[+C!^6> 䟜3[^x쭬X!uj?ɱp(> A XaHgݡս{:c>b%y[*o^|7/sԒH|xϞh3vq/pv9G!?/sca {}e8]RSp/~ʲf ?߷r~0ƟAܭ?Rm=G73o{0Ʊd3y]W}{__Or$n+f}ngԯPZ.ce3knKk?ʳQ5(HƇ>_7-]WetG]mΩ8V89m9 -R]7ĥ}+F)n-fc\Шp s/.a"e,Ru<CCYWKf{}8tk`soog[Fk֫ʬ~e9Z׽,eտ'^EMem8ߑOb1 ӻs2`YFdx.cwv'~k#mۗSo]s]q @c;ԃ8nV:=9H3(?,^5YcHվeuk[/qkP*]>u1';UGeL}.C >adU:ntifm0y^_VM.o򚷾Io=`~Iǧ͞!a !ZBPf{Kʻ?XPM.k׏3FgsrEփIn~uaZ0$nkX}=Swcy7YpF\8`p_/?Ks&>cWeO坘X45tld;}ѱV~QJ]̬)Rիpr>7GpP/?d9p~ uXtǽF?; \,䓋ұ}(д_xaVǧ?fmp7;,r_e6:\NH*li9wm^'/_a[fRXC,C,wrXd}tX\QG/Io1b;G00 ,eտŶGPyS}潮}>61rś,eտatiam[`GF8bd,pF9˗YqIe+0㔽PtϩT1d}`B5աwXk_+#%=O/պQtuRx,8`5SOGuC l_-`5u?B}?g{[oU}of9?/ncW?_B#&;{*rrhL\9KW/26SaHc+ֵoMa>6Lk'fu88WM~0vo3~~tVop };ZOɚ9@hDףLO3gsJc gkc7#;/eY? Ms 1b}e虵#WAb2wWc8A{6쿬$e?K'ޝOǧrp3kqұcjln̚GLos7;0:K].GHe/]#B?R1ﳪZhyݕcy _ĸqd(3sRn),y| 7̲ѴouH}lJc$ݭ繻s{!eVKmŴmM]–EYC#3WoH/d;[,rd9NY-)\"e107#z]/1+2[WOaf~eO_aqu[*1¶sI6˴DֲrzUWX7Y{vW4Da9#kPU-?ca u°]KG{4_닳M8]7\s"=Zď{(ѵx;.J: xtSq]P/*{v1Kz~Z9q.ŗV>_S~3_VY[++G98c\YEm=6ͿAÍqcv'&#BRϘŌJs$82;|Q}zcr-յ7ݱ?7u_tXeHwJ}^,ޣVijE56=ԶEBŨS OrO9ߜ< lܷ9yp c)χC:RUc]Yyk2[O?~лXs-Y2u kv5OdzKsU,9Ou OeYcԬmo>ڽ$焣_119>'x~nރ}d~OoV͉pat:_J'N,wT7ӪZ{ϧZqg׾uk0eW-ƨoۑ冶>Z3|k!uI/fՖ4ÀKu+''.WZ\ЮVϢƆrakP2{iXCjŨn?A[wJKh18Gyug}X"kºˣﭶa ,njOHάUEYUC.cl?Ԣ,~-}ͻ!NUeMkl4}U?kcYhe.05]7KK>wZO}] f*ŬYKX'ޘn*>/~S/ƳKLP?~_x/_Zs:.!$䴍}ԱuECv~]}do1c812o~srɖ\Yfg/~cI$8BIM!SAdobe PhotoshopAdobe Photoshop CS8BIM".MM*bj(1r2iAdobe Photoshop CS Windows2007:04:27 03:24:38Ƞd&(.HHH\dZZZZ8BIMnorm((Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpa6668BIMnorm8((Shape 18BIMSoCopnullClr ObjcRGBCRd doub@mGrn doub@BBl doub@B8BIMlfx2TnullScl UntF#Prc@XqmasterFXSwitchboolFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@YSz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMvmsk <"  _?>CGGHG _ <"H?>C8BIMluniShape 18BIMlnsrshap8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp( ?" ^^^8BIMnorm8((Shape 28BIMSoCopnullClr ObjcRGBCRd doub@BGrn doub@BBl doub@m8BIMlfx2TnullScl UntF#Prc@XqmasterFXSwitchboolFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@YSz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMvmskh`hh$9t*=p *=pw*=pQ$9QQ`w\( \(t\(8BIMluniShape 28BIMlnsrshap8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp(>ZZZ8BIMnorm8((Shape 38BIMSoCopnullClr ObjcRGBCRd doub@QGrn doub@mBl doub@B8BIMlfx2TnullScl UntF#Prc@XqmasterFXSwitchboolFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@YSz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMvmskh^hph]tk=p\=p=p(](p(^У\УtkУ8BIMluniShape 38BIMlnsrshap8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp&J8BIMnorm(&|(ABC8BIMlfx2TnullScl UntF#Prc@XqmasterFXSwitchboolFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@YSz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh"??@B@R*2TxLrTxt TEXTABC textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntantiAliasSharp TextIndexlong EngineDatatdta << /EngineDict << /Editor << /Text (ABC ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 4 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 71.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 1.0 1.0 1.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.92941 0.10196 0.10196 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 4 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 4 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluni ABC8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp*@$       33Kf~~fK33 3`rr`3BooB 9ff9 !ZռՖZ!6uu6]]<ɰɁ<<<**xϧx66WɢW{{ xx  ll ff3Ҙ3  HޕH  'Ւ'QQ       Ë HH!!Ƈii  xx  ]]NQۃ҃<<??҅TTφ<< ؈ 00WW{{uuEEɑZZBۗB  ''0000{{WåW''99KK6~Ʊ~6WW$]չՙ]$HHBo̜oE$Qf̨fQ$ 3Efr ̱rfE3-3]ff]3-$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$  0Ɋ0$$HHKK$$0333$$KKHH''3̊6$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$    Q̥Q''rrWWZZZZWW{{'* T̫TFFFFFFFFFFFFFFFFFFFFFF$$$$$$$$$$$$$$$$$$$$$$(02+'%%''&&)()()'+#!"!'())  (&&((())(.49!!"0Uw̻wD"DfwwD"w3wD3DfD"""DUwwDfݪwfDfwUfD"3w3w""w"DDf"wfwDff3"D"wf3D3fDD"ffffDDf"3DDD"UwfwD33"3DwDDf3fwD3"3D""DDUwwwDDwD3DD"3D"DD"DDwwwD݈"wU"3D"w"DfwwwD3wfwU"3D"fw""Df"DDwDfDfUD""D"wwDUDwf"3"Dw"wDwDwUDf"UDwwD"w3fUD33"UDfD3wDfUwfUD"D3"UDDwf"wwD̙wUDfwUfUDw"UDD3wD݈3ffU"w̻wD3f3fwwU"8BIMPatt8BIMTxt2; /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -0.5 /Code () >> << /Before -0.5 /Code (;) >> << /Before -0.5 /Code ([) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code ( ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0 ) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /Before -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (=) >> << /After -0.5 /Code (]) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0 ) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code (0) >> << /After -0.5 /Code () >> << /After -0.5 /Code (0) >> << /After -0.5 /Code ( ) >> << /After -0.5 /Code (0) >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code () >> << /Before -0.25 /After -0.25 /Code (0) >> << /Before -0.25 /After -0.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ 0.25 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ 0.25 0.25 0.25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 0.75 0.75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.5 0.5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.5 0.5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ 0.125 0.25 0.25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 0.25 0.25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 0.5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 0.5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ 0.125 0.25 0.5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ 0.5 0.5 0.5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) /PredefinedTag 2 >> >> >> << /Resource << /Name (PhotoshopKinsokuNone) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 1 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize 0.583 /SuperscriptPosition 0.333 /SubscriptSize 0.583 /SubscriptPosition 0.333 /SmallCapSize 0.7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 3 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 6 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) >> << /Language 25 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> ] >> /TextObjects [ << /Model << /Text (ABC ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 4 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 71.99998 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures true /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms true /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 1.0 1.0 1.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.92941 0.10196 0.10196 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 4 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 4 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 4 >> ] >> /StorySheet << /AntiAlias 4 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 4 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 86.39999 /EMHeight 71.99998 /DHeight 51.11937 /SelectionAscent -60.26439 /SelectionDescent 17.99999 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 0.0 17.99999 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 4 >> /FirstCharacterIndexInSegment 0 /UnderlineInvalidation [ 0.0 0.0 124.84639 0.0 ] /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 30000.0 17.99999 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -60.26439 124.84639 17.99999 ] /Glyphs [ 34 35 36 1 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 4 ] >> /RenderedBounds [ 0.0 -60.26439 124.84639 17.99999 ] /VisualBounds [ 0.0 -60.26439 124.84639 17.99999 ] /Invalidation [ 0.0 -60.26439 159.40607 17.99999 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Orientation 0 /KernType 1 >> ] /RunLengths [ 4 ] >> >> ] /Annotation << /Width 0.0 >> >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale 0.5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference 0.5 /WordSpacing [ 0.8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether false /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>,(#$,A8BTFFBXYQ_[TSQNLjch|ppoefbae^^f`\^aklr{ukysiW^fMNQ_J<N+ $%.%,(#$*A6BTFFBXYQ_[TRQNLjch|pnoefbad]^f`\^aklr{ukysiW^fMNO_J<N+ $%.%,(#"*A6BTFFBXYQ_[TRQNLjchzpnqefbac\^f`\^_knnyukysiW^fMNO_J<N+ $%.#޺v]vк]B///B]ӭ]:&&:]ӽ޵`: 00F_vv_F00 :`˗]&0ZjjZ0&]~J>hdzh>J~˄G 5_ݳ_5 Gh$TǿnjT$hJ2mػآm2JOWݷݠWOc8xx8c$8ڰڌ8$h'{խ{'h4pp4)22),QQ,/sأs/4 pp 4eڟe,_՝ןO?0?__,088篏_??8??oh(H0, &8H ,CwUw̻wDFCw ("DfwwD"w3 w4$whD3vVD($4LfD"f&"L("DUw(whDfݪwfDfwUfD"3w3X&w""w("DDVf"H4 wfwXD? fOX 4f3"Dh"8wfXhx(3Df3f(x CXDD"ffC 4fffDDXff4("3DDf,bXD "Uw&b, j22jfwD3( ڌT00T /p  (3"3D(w H(55p/XD6 Df3  sW $ wfXhwDh_[ -8EE8-[Ws&$3"3D"w0OD 7F7 D& "$" " XDDUwtDFDtI $ hw XhwDDwD3D&F&Lk{"$"x D"3D"vDD2F2kB $"XDDw?F<B!$hwHhwD݈"fwF! j$hU"3D"fwT-F-T2$0"XDffw$;F=!$!hwwD3wfwBFD#$U"3D"fw"BFC )!$!"XD?0f"wDD$;F;$&O2$0hwDhfDfT-F-TOsxj$hUDf"hFxs8$"HDf"ww (̚>o&~~&/$$/---- sئs ~ QQ ~&$xҫx$&45ڮډ54nFڱڗFnR2vv2R4QڸڝQ4یJ"WǼǏW"Jk$CxݮxC$kІJ>h辒h@JȔ]&"L_ݾ_L"&]ۧs? 0@_j ྾j_@0?sӭ]/*0W__W0*/Zȟ`O//O`Ȼ ]]G// //G]]ώw^wӽ^C///C^֯^:'':^ֽ᷎a:  :a͙^'$'^K $ KͅH!$$!Hj$ $$ $jK!$$!KQ !$$! Qd$$d$!$$!$j $$ j5$$5*#$$#*, $$ ,/!$$!/5"$$"5!$$!, $$   #$ ,$#$#  #$$ $,$#$ $$#$, $$#$$!Uw̻wD $ x$"$#DfwwD$$"w3$x5$w$D3$# D$5 "$f$D"$""$" $"$DU$w$$w$Df$ݪwfDfwU$$f$D"3w3 $#w""w $$"$DD$ f" $5$wfw $D f$  $5$f3"$D$"$wf $$$3$D$$3f$$ $ $D$D"$f$ 5!$fff$D$"D$ f$!5$"3$D$D$$ $,$ $D$ "$$Uw#$,!$$fw$D$3$$ !  !$!/$##$3"3$D$w $$$$/!$$ $D$! D$$f3$$!u $ $ $f w$D$##$$$ L뾚L$ u'$$$3"3$D"$ $ $$ $'$ "$" $" $$ $DDU!$w$jj$ $! $ !$w $$w$DDwD$3D$$ l$"$"$ D$$"3$D"$DD$QQ$lC$$$"#$ $DD$w#$  $C!$$$w $w$D݈"$w$TT$! "$$$U$"3$D"$w$  $!$$$" $ $Df$$w$$$!$!$ww$D3wf$w$$!$#$$U"3$D"f!w"$$!*$!$!$" $D f"DD$$'Q$$$w $D$fDf$  $Qu$$$U$D$#"$TT$u$$$" $D$"w$  $"$$$w $D$# $QQ$"5$"$"$U$D$wf$$5 $! $ !$"3" $D$w"$ss$ $ "$" $w $D$w$D $$'$a $$$ wU$D$$f$ NN$ a$!$!$"U$ $D$ $w$$5$$w $ $D$" $$ w3$$5$""$ $fU$D$#3$$3 !$$ !  !$$$"U$ $D$#f$ D3$$,#$w $ $$D fU $w $#/ $ $f U$$D"$D3$ $"U$ $$DDw$ f"w $s$w $ $D#$#̙wUDfwU$sQ$ $fU$D$w$Q>$"U$ $DD$3$>6$w $ D݈3$ f$6A !$ $f U"w̻wD#$$3f $! AW$$ $!$$!3fwwU"$W$$$$ $$ $  !$$$  "$$  $!  2$$  $2p $$ p'#$$#'$$/$$/$$#$$# !$$!   $$  ' $$ '5!$$!5o !$$! oS$$S5 !$$! 5ގK $$ Kl$ !$$! $lӈK #$$# K˖^' !$! '^ީu@  !$ " @u֯^/  /\ˡaQ//Qa˻ ^^H// //H^^            $   $   !$$!  $$  !$$!  !$$! $$ !$$!  $$ $$ #$$#  $$ !$$!"$$" !$$!  $$   #$  $#$#  #$$ $ $#$ $$#$  $$#$$!Uw̻wD $  $"$#DfwwD$$"w3$ $w$D3$# D$ "$f$D"$""$" $"$DU$w$$w$Df$ݪwfDfwU$$f$D"3w3 $#w""w $$"$DD$ f" $$wfw $D f$  $ $f3"$D$"$wf $$  $3$D$$3f$$  $ $D$D"$f$ !$fff$D$"D$ f$!$"3$D$D$$ $$ $D$ "$$Uw#$!$$fw$D$3$$ !  !$!$##$3"3$D$w $$$$!$$ $D$! D$$f3$$! $-Ҽ-$f w$D$##$$$ $$ $ $""$3"3$D"$ $ $ $$CC$" $$ $DDU!$w$#$#$ $!FF!$w $$w$DDwD$3D$$$  $""$ D$$"3$D"$DD$ $ $ $$"#$ $DD$w#$  $ $$-0$w $w$D݈"$w$ $ $"$~~$U$"3$D"$w$ $ $!$$" $ $Df$$w$$$$$ww$D3wf$w$"$#$!$$U"3$D"f!w"$"$"$!$$" $D f"DD$$$$$w $D$fDf$ $ $ $~~$U$D$#"$ $ $ $00$" $D$"w$ $ $"$$w $D$# $ $ $"$""$U$D$wf$$$ $!FF!$"3" $D$w"$#$#$ $CC$w $D$w$D $$$ $$$$ wU$D$$f$ $$ $ $0ھ2$"U$ $D$ $w$$$$w $ $D$" $$ w3$$$""$ $fU$D$#3$$3 !$$ !  !$ $$"U$ $D$#f$ D3$$ #$w $ $$D fU $w $# $ $f U$$D"$D3$  $"U$ $$DDw$ f"w $  $w $ $D#$#̙wUDfwU$ $ $fU$D$w$$"U$ $DD$3$$w $ D݈3$ f$ !$ $f U"w̻wD#$$3f $! $$ $!$$!3fwwU"$ $$$$ $$ $   !$$$  "$$  $!  $$  $  $$ #$$# $$ $$ $$  #$$#  !$$!   $$    $$  !$$!  !$$!  $$  !$$!    $$    !$$!    #$$#    !$!     !$ "              svgsalamander-0~svn95.orig/java-one-2007/art/buttons/abc_alpha.png0000644000175000017500000003402610616703330023564 0ustar moonmoonPNG  IHDR pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F-3IDATx{|\eǿڙn[I q!+5S/[ AQP\ ʺt٦"eI/n!ʺԂŵK'k-ڦig'y4sg|&i'g=>;kbbAAJ4  "  "    "   "    "  " BƓX*-+$WNlʀr`%@"e@|eyr\`2 ec80lDٰ!`Pـ3@z>)ulA;e+ %se3 %F}_U"N[qe!=G 0 s%RXٛ Hfʖx(px`+;tדҬT.2&2"b2}\&Cc^k.+e4~TV)[!" }"ÿ*T&i̬T Seh9*e/$"+o.WoC S BRQZxV"()Hr{;_!7E;; gi&:XE`J2в_0Y>Dd$YRۥI!({D%V@D@RhkBaz+ۉ"Y@$T;͗&KT)kĿVmd(sJB ʶ1$7ޥ^JB~ JID$ՙxz&~zQD@Rwq-Od7sh&" " Ia>˽)isI_)XCAH{^~lHqס^ ='G, 4YljH|y3p=P6!Bvk`K$>WV!kvr*Y+ >3 n} hon@KT:d25T6GA$SeeDdr0!\ AL q: = ̖{AC+"r #?RbHf [[-.B8<" - s 5AH&72ީmuҗAH0+{t?,p J DC[ZD$)> p[ARRh>2`=z %hABJ$>%S4& {zD@ϻOM .ewmIVH?!X|60,?Vl~'Bmnd%p?W$| ږ %&D+&v`1,Gwh8 0G j e,eUa YUm;:;4B8-Vka|9).kjvB]#ұIha+!Fax!kR>\^R0;4bevN5..亲"g֚qv s`Vږ CYYy;p(^ɵj;vb(5Ey[g)qN>v>R .a~=c<7ɺu*z{{amig]H%SY@'d8Fy4 }vq:p_8Lz ]Gkk+>M6QYYridc*WE@46(D{ZvGB??7(k Mw/":L:HTtvvWKr-|e@̻]@6}Q>UX/H ={}x Ff3?bxzlڴ)ecڲlN9wޙQ)h.B;ax ܊03[n ;qϳx φB?NoߞIGWJG|]ʗƝTZm5< 7NZjϞ=QF!98z⤜UX~?B3xB9Xƺf͚Sʂ|~[ .mA;vښ\P9So^qmV*T ~-C#Qt*++qx^'h8-ڣB(444PWWgr7<~YWx<,\yHDۍQkJD<™|IX1*'P@,:;;M=644Vs=76 @(ir̺u,p;|Q3) lݺ5vvv;)6zb}}}؈J>o=<Hv˅V։Nn'4 JvNk͡ȝsY]2s<}tv 3>g'Mto eݿ:G1`0H{{{hYˆGF9,f|i7El`|vN3s! HG±ϴ0d"b e͠/Flv 'inn硋qemeT0{odpi) 5&GN=Z _MKBOL't8߈N٦ば}}#xpQs펊(\Ҁl 4txf$2ՖťM,.焮Z:%d \|qZ [%Jfk_E 'hcyBoa GMMMA,-ܪ|rZH!Q@E3}KwLvvv-ۺgEAzƳd-Cq\y1XOeC%m>aJ ,BG\H_΅,lԇYm(liՖ-[F.+⑹|@\FV#kK- Hges8 n\k R|}3+p#QlS&$ ;+9h)֔R0^D4ư^s*0GN]m5te._Y*BJN\'( _G(DX81.ϝck R,[8lx ۀr}뼞rZU赆-C, 0çXn!֘(9ҴD=W/'y"|Wӭ/+0E0<¦A[ZM3Ҝl!,c)' k\bw cwݦw*lkkTH3:T^•2Flx H & * =ZJEgVތ'~0|썓1gaCGf5>j 6ʛs$a*;5UL尲}+Vףdjoe*t#XGF3v]4Pja[[[- e3]o!k|TٻRerEO y#e9ͅ9]]>q0{1,S?zŞ\&VFao>ij3&y&f5>ʲώ8xn+;]G@Ѳ]_Aۭ뗙̌ e_}".1~V&+qv TWwuS;N_/bi&lhh1:A֯VJ%J*}w&^18)]cu]Xz K ~W:kJ Yˑ1|>V]]N@ ڦ5X;y׉)E#r7`1lDyMݮA{H1>J=W_.nLFpXLh)m&hhh۷[-[]sgs2"{ I/o,en0->ʚW Qx\ t/i>'2tj[ Bحa,Ӊ㡩v&&&غuLs8q[ESny5N/ 2GY58]ƻ*ڋ#Wf촴粢 c544 8NN7+Y))y,;.lxݹKb|`k;Vjtqa$eE|OjiiaVs>yO r{EY۬R) --- r[Ee{!|_ _kxODE[~ch+cۖ;VcY-[v*ٽ`P#X/(d% sbxWV5$HÌu+=$/ˊ̅3.*۩p۶mNc0Vijji-mciK&(K;^˘ Vpb~,,gK _ OgbRa$lݺ@ @kk9pxX!m$ewK@b|w;tʼn _\g@_xuسgaGMLXBs(;^f(z%tʼn _,ϳr\:l߾ְ B@GE% |<ċs(zqW:AiGzg2=uZK(;^r2:ċs,]zp2W: 9>cqg<yff͚5]z饬Y5k͛ٶm͵pgϞ6gr(BV(K;/'uaghW:sss(4nluu5.  crQ__OCCdC=FwK ٦ B<)^##1<$6tmS#czĶWٝLO0磥MUUmmmEx ?yAHY2GY_ UċSa&YBtSNK&-gK S"#& TUUcA"1ޘq^PGX&\ċsq:^㓻նm–qCD̠QPZUBVr>?w6.E8o>pqFKp8~[9" ge.8iw(VwK@X'\n6|UWWD|aˊ |'q's ZZZhlltjCˉӓ dYF 2ewK@^!vޡN(3ߑ=72|J$XѲQʮe 5bUijj +#G=o*#=2lKy% ːx=iN*H0Yf6ʖ-[L#r/ǘ8*HseD@G[ ocxX(ʾ@:\;T$ fӋ Q3V($gS@~$xvF`/L_M&~d`{9Jʐ8_bsɄ;e>jL]o}ߊkkc3!|S]]$2|qVd&G*FM{ĉtQەNnطbq0g<ה*<w [vĸ%lܛ%- cxwwcޥ>#ɤdb@`тqsү*>[۸׹vXF!裺N9? ֛_k,XJrVRnK/5U40VVQQaE31Uck?:MYY|Qߊӷbieߊ~W/Sn&Tvz0V}YqxcBc)Xp~KKr2֭9TZ@S.>qHHF?g\4TWvzOZUb|27+ `0L@S궳fr?zv6aa,\szB'oMdj(! W6jvqMiss*9VƊֱז}00PWW8vGLOj+ʜ~?fQ@+-Jw5nk%&ɫ93#H9S߶ aI+^{L~|rT$KR' 'rwҹ 7ʤ܄mcnL'܍\Y\`d h}e<|\nbQh|_=)|֐8g%eO0ִN:J [2\Hmmmص8% 51H0 ɀ0>ˣGlcْɈ,bu.UY"r}OS>8&$C@w}r-- U6Kb c4_@mԍb:ΰ}#Ed^VOS)Hgmڷq&Efʘ^S\0Q@9hipeAkXS\ICC uc>9<2Fp\܇ƕAsxBFǨ>bZ[lc}D GO~x%!upd4n|'J5vttp8,8Ws-c|_i9,+ɦMz猂@?fk|4>΁!v MD9:A=S\MGs7|"֖e1xq8灯/{G W]sC{5wzK?gZKga#cGF;4C#Yw:R6yvbGa{JnJss3?>Cql%|eY҉Ugz̍475aO_$'j &!Wmm1iPXh+V4R]@3ɟO*=c=TUU̍e7e W,緕 |VE\]!ijj2-詄q_;,]ƸwGs+!Tuw^Za{7-!XROevWcՅ982Q: r 7me1HD/wZͬK/4Zgp$Űw'CS Kj$қ=atBk1v # hjǎVQ=q̚~[[ M׋fͶ֓̃w)PR=DU l=ca;M$+VI?̀~F<Oؼ]sgU<|ka.plnnrN:L$qx$6:|W0MNlL _M6*0..+s%\@f 8rgeد|7e'llT-a,O[[k֬9G8@ YZ&]To͍|Pưɢ7RUUECCCruGN֬yAd~T]552w,y Nj*XZ[Zģ$*,ʅ.;J8S[Dԝ]X-_N06looq,ȧesƽR2'M" + 3zOeeբ=vB9!v*;PVJPmՎ`4 @zTH`}ј I 6U򡱟9sNaC3[Z,窒n)/ɦ#hu[W 6{k`8Κ;JSZ<":FLb68J~ SY% Qvb0 M%Z;pYa5)Q'@(i">,`Z8k``tv `;4BPc"͈j eY*Ǒê|{F;4j߽C#ztpP˲\*XKMQaڍb̃halS+u Bj &(Mhi9|mVHj0|$p?AHD0,8]E3-K |pI_!MS֓_8gz7I!y xtҙ~飂 /|4,zFJ!!ivId˂:[ $~6Yd[F \.}Y>'0p2N(S@e˥o '(clL$+ #?E[̓dc"a4)%7YAi%3J,  cl8asyNُѪ~#"Dl7K^A<ȔIv* d-h%2 fz%${I_+x SHbpe_ xx-<',xjRvsLَl:q x>agc#Fjn B*o%I-ޣ^+I!_ 2Hff\iAH=h^JID$]YAKTNiA9$`;WD$ӨF[NeI6hsF[A)M"-\RV%M"3rm灝ID@%;TviA;7^HKYݿGi sOF|9   "  "  "  "   " "   "  " 0?MtIENDB`svgsalamander-0~svn95.orig/java-one-2007/lib/0000755000175000017500000000000011562044261017443 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/lib/include/0000755000175000017500000000000011562044261021066 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/lib/library/0000755000175000017500000000000011562044261021107 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/lib/library/jogl/0000755000175000017500000000000011562044330022037 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/nbproject/0000755000175000017500000000000011562044305020662 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/nbproject/project.xml0000755000175000017500000002372210614346724023072 0ustar moonmoon org.netbeans.modules.ant.freeform java-one-2007 src/main/java src/test/java ../www java src/main/java java src/main/res java src/test/java java src/test/res java ../www build clean javadoc run checkintest clean build debug compile-selected-files files ${src.main.dir} \.java$ relative-path , compile-selected-files-test files ${src.test.dir} \.java$ relative-path , run-selected-files classname ${src.main.dir} \.java$ java-name run-selected-files-test classname ${src.test.dir} \.java$ java-name debug-selected-files classname ${src.main.dir} \.java$ java-name debug-selected-files-test classname ${src.test.dir} \.java$ java-name debug-fix fix.file ${src.main.dir} \.java$ relative-path-noext test-selected-files classname ${src.main.dir} \.java$ java-name jar build/jar/java-one-2007.jar build src/main/java src/main/res src/test/java src/test/res ../www build.xml src/main/java lib/library/jogl/jogl.jar build/jar/java-one-2007.jar 1.5 src/main/res 1.5 src/test/java build/jar/java-one-2007.jar;lib/library/jogl/jogl.jar 1.5 src/test/res 1.5 ../www 1.5 svgsalamander-0~svn95.orig/java-one-2007/nbproject/private/0000755000175000017500000000000011562044305022334 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/nbproject/private/private.xml0000755000175000017500000000032310614346724024540 0ustar moonmoon svgsalamander-0~svn95.orig/java-one-2007/manifest.mf0000755000175000017500000000064210616703330021032 0ustar moonmoonManifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0Beta3 Created-By: 1.6.0-b105 (Sun Microsystems Inc.) Main-Class: com.kitfox.Main Built-By: kitfox Name: common Specification-Title: JavaOne Demos - Mark Mckay Specification-Version: 1 Specification-Vendor: Kitfox Implementation-Title: java-one-2007 Implementation-Version: Version 1, Date May 4 2007 Implementation-Vendor: Mark McKay, mark@kitfox.com svgsalamander-0~svn95.orig/java-one-2007/src/0000755000175000017500000000000011562044310017457 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/0000755000175000017500000000000011562044310020436 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/0000755000175000017500000000000011562044305021363 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/0000755000175000017500000000000011562044305022141 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/0000755000175000017500000000000011562044305023445 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/0000755000175000017500000000000011562044307025403 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/blur/0000755000175000017500000000000011562044305026345 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/blur/BlurFrame.java0000644000175000017500000000300210616703330031061 0ustar moonmoon/* * TexRectangleFrame.java * * Created on April 25, 2007, 8:26 PM */ package com.kitfox.javaone2007.blur; import com.kitfox.javaone2007.texRectangle.TexRectanglePanel; import java.awt.BorderLayout; /** * * @author kitfox */ public class BlurFrame extends javax.swing.JFrame { BlurPanel panel = new BlurPanel(); /** Creates new form TexRectangleFrame */ public BlurFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new BlurFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/blur/BlurFrame.form0000644000175000017500000000225110616703330031110 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/blur/BlurPanel.java0000644000175000017500000002243310616703330031077 0ustar moonmoon/* * TexRectanglePanel.java * * Created on April 25, 2007, 8:59 PM */ package com.kitfox.javaone2007.blur; import com.sun.opengl.util.BufferUtil; import java.awt.BorderLayout; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; /** * * @author kitfox */ public class BlurPanel extends javax.swing.JPanel implements GLEventListener { private GLCanvas canvas; int texId; ByteBuffer imgData; WritableRaster raster; int program; /** Creates new form TexRectanglePanel */ public BlurPanel() { initComponents(); } public void addNotify() { super.addNotify(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas, BorderLayout.CENTER); } public void init(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClearColor(0, 0, 0, 0); gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); //------------------------------------------- try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc_alpha.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); imgData = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgData.put((byte)raster.getSample(i, j, 0)); imgData.put((byte)raster.getSample(i, j, 1)); imgData.put((byte)raster.getSample(i, j, 2)); imgData.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } //----------------------------------------------- IntBuffer texBuf = BufferUtil.newIntBuffer(1); gl.glGenTextures(1, texBuf); texId = texBuf.get(0); imgData.rewind(); // gl.glClientActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, raster.getWidth(), raster.getHeight(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgData); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); // gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); // gl.glShadeModel(GL.GL_FLAT); //---------------------------------------------- // Build shaders String[] lines; IntBuffer sizes; try { int vertShad = gl.glCreateShader(GL.GL_VERTEX_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/filter.vert").openStream()); sizes = stringSizes(lines); gl.glShaderSource(vertShad, lines.length, lines, sizes); gl.glCompileShader(vertShad); System.err.println("***" + getLog(gl, vertShad)); int fragShad = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/seperableSymmetricKernel.frag").openStream()); sizes = stringSizes(lines); gl.glShaderSource(fragShad, lines.length, lines, sizes); gl.glCompileShader(fragShad); System.err.println("***" + getLog(gl, fragShad)); program = gl.glCreateProgram(); gl.glAttachShader(program, vertShad); gl.glAttachShader(program, fragShad); // gl.glAttachObjectARB(program, vertShad); // gl.glAttachObjectARB(program, fragShad); gl.glLinkProgram(program); //Check log System.err.println("***" + getLog(gl, program)); } catch (Exception e) { e.printStackTrace(); return; } } public String getLog(GL gl, int handle) { IntBuffer ibuf = BufferUtil.newIntBuffer(1); gl.glGetObjectParameterivARB(handle, GL.GL_OBJECT_INFO_LOG_LENGTH_ARB, ibuf); int len = ibuf.get(0); if (len == 0) return ""; ibuf.rewind(); ByteBuffer bbuf = BufferUtil.newByteBuffer(len); gl.glGetInfoLogARB(program, len, ibuf, bbuf); bbuf.rewind(); byte[] bytes = new byte[ibuf.get(0)]; bbuf.get(bytes); return new String(bytes); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); float[] kernel = buildGaussianKernel(3, new float[5]); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glUseProgramObjectARB(program); int sourceMapId = gl.glGetUniformLocationARB(program, "source"); gl.glUniform1i(sourceMapId, 0); gl.glUniform1fv( gl.glGetUniformLocationARB(program, "kernelX"), kernel.length, kernel, 0); // gl.glUniform1i( // gl.glGetUniformLocationARB(program, "kernelSizeX"), // kernel.length); gl.glUniform1fv( gl.glGetUniformLocationARB(program, "kernelY"), kernel.length, kernel, 0); // gl.glUniform1i( // gl.glGetUniformLocationARB(program, "kernelSizeY"), // kernel.length); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(raster.getWidth(), 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(raster.getWidth(), raster.getHeight()); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, raster.getHeight()); gl.glVertex2f(0, 1); } gl.glEnd(); gl.glUseProgram(0); gl.glFlush(); } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } public String[] loadShader(InputStream is) throws IOException { InputStreamReader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); ArrayList lines = new ArrayList(); for (String line = br.readLine(); line != null; line = br.readLine()) { lines.add(line); } return lines.toArray(new String[lines.size()]); } private IntBuffer stringSizes(String[] lines) { IntBuffer buf = BufferUtil.newIntBuffer(lines.length); for (String line: lines) { buf.put(line.length()); } buf.rewind(); return buf; } public float[] buildGaussianKernel(float stdDev, float[] retArr) { float ss2 = 2 * stdDev * stdDev; double scalar = 1 / Math.sqrt(ss2 * Math.PI); double ss2Inv = 1 / ss2; for (int i = 0; i < retArr.length; i++) { retArr[i] = (float)(Math.exp(-i * i * ss2Inv) * scalar); } return retArr; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/blur/BlurPanel.form0000644000175000017500000000172310616703330031120 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/0000755000175000017500000000000011562044307030030 5ustar moonmoon././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectangleFrame.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectan0000644000175000017500000000276310614350031031647 0ustar moonmoon/* * TexRectangleFrame.java * * Created on April 25, 2007, 8:26 PM */ package com.kitfox.javaone2007.texRectangle; import java.awt.BorderLayout; /** * * @author kitfox */ public class TexRectangleFrame extends javax.swing.JFrame { TexRectanglePanel panel = new TexRectanglePanel(); /** Creates new form TexRectangleFrame */ public TexRectangleFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TexRectangleFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectangleFrame.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectan0000644000175000017500000000161710614350031031644 0ustar moonmoon
././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectanglePanel.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectan0000644000175000017500000001124510614350031031642 0ustar moonmoon/* * TexRectanglePanel.java * * Created on April 25, 2007, 8:59 PM */ package com.kitfox.javaone2007.texRectangle; import com.sun.opengl.util.BufferUtil; import java.awt.BorderLayout; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import javax.imageio.ImageIO; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; /** * * @author kitfox */ public class TexRectanglePanel extends javax.swing.JPanel implements GLEventListener { private GLCanvas canvas; ByteBuffer imgData; WritableRaster raster; /** Creates new form TexRectanglePanel */ public TexRectanglePanel() { initComponents(); } public void addNotify() { super.addNotify(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas, BorderLayout.CENTER); } public void init(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClearColor(1, 1, 0, 0); gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); //------------------------------------------- try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); imgData = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgData.put((byte)raster.getSample(i, j, 0)); imgData.put((byte)raster.getSample(i, j, 1)); imgData.put((byte)raster.getSample(i, j, 2)); imgData.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } //----------------------------------------------- IntBuffer texBuf = BufferUtil.newIntBuffer(1); gl.glGenTextures(1, texBuf); int texId = texBuf.get(0); imgData.rewind(); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA8, raster.getWidth(), raster.getHeight(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgData); gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GL.GL_FLAT); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(raster.getWidth(), 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(raster.getWidth(), raster.getHeight()); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, raster.getHeight()); gl.glVertex2f(0, 1); } gl.glEnd(); gl.glFlush(); } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectanglePanel.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/texRectangle/TexRectan0000644000175000017500000000172310614350031031642 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/0000755000175000017500000000000011562044307026651 5ustar moonmoon././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderFrame.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderFrame.jav0000644000175000017500000000301610614350031031523 0ustar moonmoon/* * TexRectangleFrame.java * * Created on April 25, 2007, 8:26 PM */ package com.kitfox.javaone2007.shader; import com.kitfox.javaone2007.texRectangle.TexRectanglePanel; import java.awt.BorderLayout; /** * * @author kitfox */ public class ShaderFrame extends javax.swing.JFrame { ShaderPanel panel = new ShaderPanel(); /** Creates new form TexRectangleFrame */ public ShaderFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ShaderFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderFrame.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderFrame.for0000644000175000017500000000225110614350031031531 0ustar moonmoon
././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderPanel.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderPanel.jav0000644000175000017500000002364210614350031031537 0ustar moonmoon/* * TexRectanglePanel.java * * Created on April 25, 2007, 8:59 PM */ package com.kitfox.javaone2007.shader; import com.sun.opengl.util.BufferUtil; import java.awt.BorderLayout; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; /** * * @author kitfox */ public class ShaderPanel extends javax.swing.JPanel implements GLEventListener { private GLCanvas canvas; int texId; ByteBuffer imgData; WritableRaster raster; int program; /** Creates new form TexRectanglePanel */ public ShaderPanel() { initComponents(); } public void addNotify() { super.addNotify(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas, BorderLayout.CENTER); } public void init(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClearColor(0, 0, 0, 0); gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); //------------------------------------------- try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); imgData = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgData.put((byte)raster.getSample(i, j, 0)); imgData.put((byte)raster.getSample(i, j, 1)); imgData.put((byte)raster.getSample(i, j, 2)); imgData.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } //----------------------------------------------- IntBuffer texBuf = BufferUtil.newIntBuffer(1); gl.glGenTextures(1, texBuf); texId = texBuf.get(0); imgData.rewind(); // gl.glClientActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, raster.getWidth(), raster.getHeight(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgData); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); // gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); // gl.glShadeModel(GL.GL_FLAT); //---------------------------------------------- // Build shaders String[] lines; IntBuffer sizes; try { int vertShad = gl.glCreateShader(GL.GL_VERTEX_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/filter.vert").openStream()); sizes = stringSizes(lines); gl.glShaderSource(vertShad, lines.length, lines, sizes); gl.glCompileShader(vertShad); System.err.println("***" + getLog(gl, vertShad)); int fragShad = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/filter.frag").openStream()); sizes = stringSizes(lines); gl.glShaderSource(fragShad, lines.length, lines, sizes); gl.glCompileShader(fragShad); System.err.println("***" + getLog(gl, fragShad)); program = gl.glCreateProgram(); gl.glAttachShader(program, vertShad); gl.glAttachShader(program, fragShad); // gl.glAttachObjectARB(program, vertShad); // gl.glAttachObjectARB(program, fragShad); gl.glLinkProgram(program); //Check log System.err.println("***" + getLog(gl, program)); } catch (Exception e) { e.printStackTrace(); return; } } public String getLog(GL gl, int handle) { IntBuffer ibuf = BufferUtil.newIntBuffer(1); gl.glGetObjectParameterivARB(handle, GL.GL_OBJECT_INFO_LOG_LENGTH_ARB, ibuf); int len = ibuf.get(0); if (len == 0) return ""; ibuf.rewind(); ByteBuffer bbuf = BufferUtil.newByteBuffer(len); gl.glGetInfoLogARB(program, len, ibuf, bbuf); bbuf.rewind(); byte[] bytes = new byte[ibuf.get(0)]; bbuf.get(bytes); return new String(bytes); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); /* IntBuffer ibuf = BufferUtil.newIntBuffer(3); // gl.glGetObjectParameterivARB(program, GL.GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB, ibuf); // int attrMaxLength = ibuf.get(0); gl.glGetObjectParameterivARB(program, GL.GL_OBJECT_ACTIVE_UNIFORMS_ARB, ibuf); int numUniformVar = ibuf.get(0); gl.glGetObjectParameterivARB(program, GL.GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, ibuf); int maxUniformNameLength = ibuf.get(0); //gl.glGetActiveUniform(program, ByteBuffer buf = BufferUtil.newByteBuffer(maxUniformNameLength); IntBuffer ibufLen = BufferUtil.newIntBuffer(3); IntBuffer ibufSize = BufferUtil.newIntBuffer(3); IntBuffer ibufType = BufferUtil.newIntBuffer(3); for (int i = 0; i < numUniformVar; i++) { gl.glGetActiveUniform(program, i, maxUniformNameLength, ibufLen, ibufSize, ibufType, buf); buf.rewind(); byte[] arr = new byte[ibufLen.get(0)]; buf.get(arr); buf.rewind(); String name = new String(arr); } */ // gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); // gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glUseProgramObjectARB(program); // int sizeId = gl.glGetUniformLocation(program, "size"); // int ableId = gl.glGetUniformLocation(program, "able"); // int bakerId = gl.glGetUniformLocation(program, "baker"); // int charlieId = gl.glGetUniformLocation(program, "charlie"); // int deltaId = gl.glGetUniformLocation(program, "delta"); // int echoId = gl.glGetUniformLocation(program, "echo"); // gl.glUniform2f(sizeId, raster.getWidth(), raster.getHeight()); int sourceMapId = gl.glGetUniformLocationARB(program, "sourcemap"); gl.glUniform1i(sourceMapId, 0); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(raster.getWidth(), 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(raster.getWidth(), raster.getHeight()); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, raster.getHeight()); gl.glVertex2f(0, 1); } gl.glEnd(); gl.glUseProgram(0); gl.glFlush(); } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } public String[] loadShader(InputStream is) throws IOException { InputStreamReader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); ArrayList lines = new ArrayList(); for (String line = br.readLine(); line != null; line = br.readLine()) { lines.add(line); } return lines.toArray(new String[lines.size()]); } private IntBuffer stringSizes(String[] lines) { IntBuffer buf = BufferUtil.newIntBuffer(lines.length); for (String line: lines) { buf.put(line.length()); } buf.rewind(); return buf; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderPanel.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/shader/ShaderPanel.for0000644000175000017500000000172310614350031031541 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/0000755000175000017500000000000011562044307026673 5ustar moonmoon././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalFrame.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalFrame.jav0000644000175000017500000000301610617140334031575 0ustar moonmoon/* * TexRectangleFrame.java * * Created on April 25, 2007, 8:26 PM */ package com.kitfox.javaone2007.normal; import com.kitfox.javaone2007.texRectangle.TexRectanglePanel; import java.awt.BorderLayout; /** * * @author kitfox */ public class NormalFrame extends javax.swing.JFrame { NormalPanel panel = new NormalPanel(); /** Creates new form TexRectangleFrame */ public NormalFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NormalFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalFrame.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalFrame.for0000644000175000017500000000225110617140334031603 0ustar moonmoon
././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalPanel.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalPanel.jav0000644000175000017500000003662110617140334031612 0ustar moonmoon/* * TexRectanglePanel.java * * Created on April 25, 2007, 8:59 PM */ package com.kitfox.javaone2007.normal; import com.sun.opengl.util.BufferUtil; import java.awt.BorderLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; /** * * @author kitfox */ public class NormalPanel extends javax.swing.JPanel implements GLEventListener { private GLCanvas canvas; int texColorId; int texNormalId; int width; int height; int program; int mouseX = 0; int mouseY = 0; boolean highlight; /** Creates new form TexRectanglePanel */ public NormalPanel() { initComponents(); } public void addNotify() { super.addNotify(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas, BorderLayout.CENTER); canvas.addMouseListener( new MouseListener() { public void mouseClicked(MouseEvent evt) { } public void mousePressed(MouseEvent evt) { int mod = evt.getModifiersEx(); if ((mod & MouseEvent.BUTTON3_DOWN_MASK) == MouseEvent.BUTTON3_DOWN_MASK) { updateLightPosition(evt); } if ((mod & MouseEvent.BUTTON1_DOWN_MASK) == MouseEvent.BUTTON1_DOWN_MASK) { highlight = true; // System.err.println("Flame On"); canvas.repaint(); } } public void mouseReleased(MouseEvent evt) { int mod = evt.getModifiersEx(); if ((mod & MouseEvent.BUTTON1_DOWN_MASK) != MouseEvent.BUTTON1_DOWN_MASK) { highlight = false; // System.err.println("Flame Off"); canvas.repaint(); } } public void mouseEntered(MouseEvent evt) { } public void mouseExited(MouseEvent evt) { } } ); canvas.addMouseMotionListener( new MouseMotionListener() { public void mouseDragged(MouseEvent evt) { int mod = evt.getModifiersEx(); if ((mod & MouseEvent.BUTTON3_DOWN_MASK) == MouseEvent.BUTTON3_DOWN_MASK) { updateLightPosition(evt); } } public void mouseMoved(MouseEvent evt) { } } ); } private void updateLightPosition(MouseEvent evt) { mouseX = width * evt.getX() / canvas.getWidth(); mouseY = height * (canvas.getHeight() - evt.getY()) / canvas.getHeight(); canvas.repaint(); } public void init(GLAutoDrawable gLAutoDrawable) { ByteBuffer imgDataColor; ByteBuffer imgDataNormal; WritableRaster raster; GL gl = gLAutoDrawable.getGL(); gl.glClearColor(0, 0, 0, 0); gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); //------------------------------------------- try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc_alpha.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); width = raster.getWidth(); height = raster.getHeight(); mouseX = width / 2; mouseY = height / 2; imgDataColor = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgDataColor.put((byte)raster.getSample(i, j, 0)); imgDataColor.put((byte)raster.getSample(i, j, 1)); imgDataColor.put((byte)raster.getSample(i, j, 2)); imgDataColor.put((byte)raster.getSample(i, j, 3)); } } url = getClass().getResource("/com/kitfox/javaone2007/abc_alpha_normal.png"); img = ImageIO.read(url); raster = img.getRaster(); imgDataNormal = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgDataNormal.put((byte)raster.getSample(i, j, 0)); imgDataNormal.put((byte)raster.getSample(i, j, 1)); imgDataNormal.put((byte)raster.getSample(i, j, 2)); imgDataNormal.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } //----------------------------------------------- IntBuffer texBuf = BufferUtil.newIntBuffer(2); gl.glGenTextures(2, texBuf); texColorId = texBuf.get(0); texNormalId = texBuf.get(1); imgDataColor.rewind(); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texColorId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, raster.getWidth(), raster.getHeight(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgDataColor); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); imgDataNormal.rewind(); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glActiveTexture(GL.GL_TEXTURE1); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texNormalId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, raster.getWidth(), raster.getHeight(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgDataNormal); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); // gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); // gl.glShadeModel(GL.GL_FLAT); //---------------------------------------------- // Build shaders String[] lines; IntBuffer sizes; try { int vertShad = gl.glCreateShader(GL.GL_VERTEX_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/filter.vert").openStream()); sizes = stringSizes(lines); gl.glShaderSource(vertShad, lines.length, lines, sizes); gl.glCompileShader(vertShad); System.err.println("***" + getLog(gl, vertShad)); int fragShad = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); lines = loadShader(getClass().getResource("/com/kitfox/javaone2007/shader/normalShader.frag").openStream()); sizes = stringSizes(lines); gl.glShaderSource(fragShad, lines.length, lines, sizes); gl.glCompileShader(fragShad); System.err.println("***" + getLog(gl, fragShad)); program = gl.glCreateProgram(); gl.glAttachShader(program, vertShad); gl.glAttachShader(program, fragShad); // gl.glAttachObjectARB(program, vertShad); // gl.glAttachObjectARB(program, fragShad); gl.glLinkProgram(program); //Check log System.err.println("***" + getLog(gl, program)); } catch (Exception e) { e.printStackTrace(); return; } } public String getLog(GL gl, int handle) { IntBuffer ibuf = BufferUtil.newIntBuffer(1); gl.glGetObjectParameterivARB(handle, GL.GL_OBJECT_INFO_LOG_LENGTH_ARB, ibuf); int len = ibuf.get(0); if (len == 0) return ""; ibuf.rewind(); ByteBuffer bbuf = BufferUtil.newByteBuffer(len); gl.glGetInfoLogARB(program, len, ibuf, bbuf); bbuf.rewind(); byte[] bytes = new byte[ibuf.get(0)]; bbuf.get(bytes); return new String(bytes); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glUseProgramObjectARB(program); gl.glUniform1i( gl.glGetUniformLocationARB(program, "sourceColor"), 0); gl.glUniform1i( gl.glGetUniformLocationARB(program, "sourceNormal"), 1); //System.err.println("Highlight: " + highlight); gl.glUniform1i( gl.glGetUniformLocationARB(program, "highlight"), highlight ? 1 : 0); if (check_directional.isSelected()) { gl.glUniform4f( gl.glGetUniformLocationARB(program, "lightPosition"), mouseX - (width / 2), (height / 2) - mouseY, slider_depth.getValue(), 0); } else { gl.glUniform4f( gl.glGetUniformLocationARB(program, "lightPosition"), mouseX, mouseY, slider_depth.getValue(), 1); } gl.glActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texColorId); gl.glActiveTexture(GL.GL_TEXTURE1); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texNormalId); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(width, 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(width, height); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, height); gl.glVertex2f(0, 1); } gl.glEnd(); gl.glUseProgram(0); gl.glFlush(); } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } public String[] loadShader(InputStream is) throws IOException { InputStreamReader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); ArrayList lines = new ArrayList(); for (String line = br.readLine(); line != null; line = br.readLine()) { lines.add(line); } return lines.toArray(new String[lines.size()]); } private IntBuffer stringSizes(String[] lines) { IntBuffer buf = BufferUtil.newIntBuffer(lines.length); for (String line: lines) { buf.put(line.length()); } buf.rewind(); return buf; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); check_directional = new javax.swing.JCheckBox(); slider_depth = new javax.swing.JSlider(); setLayout(new java.awt.BorderLayout()); jPanel1.setLayout(new java.awt.BorderLayout()); check_directional.setSelected(true); check_directional.setText("Directional"); check_directional.setToolTipText("Toggle between point and directional lights"); check_directional.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); check_directional.setMargin(new java.awt.Insets(0, 0, 0, 0)); check_directional.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { check_directionalActionPerformed(evt); } }); jPanel1.add(check_directional, java.awt.BorderLayout.WEST); slider_depth.setMaximum(200); slider_depth.setToolTipText("Height of light above canvas"); slider_depth.setValue(100); slider_depth.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { slider_depthStateChanged(evt); } }); jPanel1.add(slider_depth, java.awt.BorderLayout.CENTER); add(jPanel1, java.awt.BorderLayout.SOUTH); }// //GEN-END:initComponents private void check_directionalActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_check_directionalActionPerformed {//GEN-HEADEREND:event_check_directionalActionPerformed if (canvas != null) { canvas.repaint(); } }//GEN-LAST:event_check_directionalActionPerformed private void slider_depthStateChanged(javax.swing.event.ChangeEvent evt)//GEN-FIRST:event_slider_depthStateChanged {//GEN-HEADEREND:event_slider_depthStateChanged if (canvas != null) { canvas.repaint(); } }//GEN-LAST:event_slider_depthStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBox check_directional; private javax.swing.JPanel jPanel1; private javax.swing.JSlider slider_depth; // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalPanel.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/normal/NormalPanel.for0000644000175000017500000000746110617140334031620 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/0000755000175000017500000000000011562044310030750 5ustar moonmoon././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOFrame.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOF0000644000175000017500000000271310614350031031407 0ustar moonmoon/* * TexRectangleFrame.java * * Created on April 25, 2007, 8:26 PM */ package com.kitfox.javaone2007.frameBufferObject; import java.awt.BorderLayout; /** * * @author kitfox */ public class FBOFrame extends javax.swing.JFrame { FBOPanel panel = new FBOPanel(); /** Creates new form TexRectangleFrame */ public FBOFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FBOFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOFrame.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOF0000644000175000017500000000225110614350031031404 0ustar moonmoon
././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOPanel.javasvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOP0000644000175000017500000003103010614350031031413 0ustar moonmoon/* * TexRectanglePanel.java * * Created on April 25, 2007, 8:59 PM */ package com.kitfox.javaone2007.frameBufferObject; import com.sun.opengl.util.BufferUtil; import com.sun.opengl.util.GLUT; import java.awt.BorderLayout; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import javax.imageio.ImageIO; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.media.opengl.glu.GLU; /** * * @author kitfox */ public class FBOPanel extends javax.swing.JPanel implements GLEventListener { private GLCanvas canvas; // ByteBuffer imgData; // WritableRaster raster; int frameBufferId; int depthId; int texId; int destWidth = 640; int destHeight = 480; /** Creates new form TexRectanglePanel */ public FBOPanel() { initComponents(); } public void addNotify() { super.addNotify(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas, BorderLayout.CENTER); } public void init(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); //Load gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); //----------------------------------------------- IntBuffer ibuf = BufferUtil.newIntBuffer(1); gl.glGenFramebuffersEXT(1, ibuf); frameBufferId = ibuf.get(0); ibuf.rewind(); gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, frameBufferId); // gl.glGenRenderbuffersEXT(1, ibuf); // depthId = ibuf.get(0); // ibuf.rewind(); // gl.glBindRenderbufferEXT(GL.GL_RENDERBUFFER_EXT, depthId); // gl.glRenderbufferStorageEXT(GL.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT, // destWidth, destHeight); gl.glGenTextures(1, ibuf); texId = ibuf.get(0); ibuf.rewind(); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); ByteBuffer imgData = BufferUtil.newByteBuffer(destWidth * destHeight * 4); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, destWidth, destHeight, 0, GL.GL_RGBA, // GL.GL_UNSIGNED_BYTE, 0); GL.GL_UNSIGNED_BYTE, imgData); //Attach texture back buffer gl.glFramebufferTexture2DEXT(GL.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_RECTANGLE_ARB, texId, 0); // gl.glFramebufferRenderbufferEXT(GL.GL_FRAMEBUFFER_EXT, // GL.GL_DEPTH_ATTACHMENT_EXT, GL.GL_RENDERBUFFER_EXT, depthId); //Create empty texture int status = gl.glCheckFramebufferStatusEXT (GL.GL_FRAMEBUFFER_EXT); switch (status) { case GL.GL_FRAMEBUFFER_COMPLETE_EXT: System.out.println("FrameBuffer Created"); break; case GL.GL_FRAMEBUFFER_UNSUPPORTED_EXT: System.out.println("FBO configuration unsupported"); break; default: System.out.println( "FBO programmer error" ); break; } gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0); // Unbind the FBO for now initAbc(gl); } int texAbcId; int texAbcWidth; int texAbcHeight; public void initAbc(GL gl) { WritableRaster raster; ByteBuffer imgData; try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); imgData = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgData.put((byte)raster.getSample(i, j, 0)); imgData.put((byte)raster.getSample(i, j, 1)); imgData.put((byte)raster.getSample(i, j, 2)); imgData.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } IntBuffer texBuf = BufferUtil.newIntBuffer(1); gl.glGenTextures(1, texBuf); texAbcId = texBuf.get(0); imgData.rewind(); texAbcWidth = raster.getWidth(); texAbcHeight = raster.getHeight(); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texAbcId); gl.glTexImage2D(GL.GL_TEXTURE_RECTANGLE_ARB, 0, GL.GL_RGBA, texAbcWidth, texAbcHeight, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgData); // gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, 0); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); // gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, 0); gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, frameBufferId); // gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); gl.glPushAttrib(GL.GL_ALL_ATTRIB_BITS); gl.glViewport(0, 0, destWidth, destHeight); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // gl.glClearColor(0, 0, 0, 0); // gl.glClearColor(1, 1, 1, 1); // gl.glClearColor(1, 1, 0, 1); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); //gl.glShadeModel(GL.GL_SMOOTH); //gl.glClearDepth(1.0f); //gl.glEnable(GL.GL_DEPTH_TEST); //gl.glDepthFunc(GL.GL_LEQUAL); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, 0); // gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_DECAL); // gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); // gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE); // gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_BLEND); // gl.glEnable(GL.GL_BLEND); // gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); // gl.glBlendFunc(GL.GL_SRC_COLOR, GL.GL_ZERO); // gl.glBlendFunc(GL.GL_ZERO, GL.GL_DST_COLOR); // gl.glShadeModel(GL.GL_FLAT); gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glFrustum(-1, 1, -1, 1, 1.5, 20); // gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); /* gl.glColor3f(0, 0, 1); gl.glBegin(GL.GL_POLYGON); { // gl.glVertex3f(-1, -1, 0); // gl.glVertex3f(1, -1, 0); // gl.glVertex3f(1, 1, 0); // gl.glVertex3f(-1, 1, 0); gl.glVertex3f(.25f, .25f, 0); gl.glVertex3f(.75f, .25f, 0); gl.glVertex3f(.75f, .75f, 0); gl.glVertex3f(.25f, .75f, 0); } gl.glEnd(); */ gl.glColor3f(0, 1, 1); gl.glLoadIdentity(); GLU glu = new GLU(); glu.gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0); gl.glScalef(1.0f, 2.0f, 1.0f); GLUT glut = new GLUT(); glut.glutWireCube(1); // glut.glutSolidCube(1); //----------------------- // Draw rasters gl.glMatrixMode(GL.GL_PROJECTION); { gl.glLoadIdentity(); gl.glOrtho(0, 1, 0, 1, -1, 1); } gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glShadeModel(GL.GL_FLAT); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texAbcId); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(texAbcWidth, 0); gl.glVertex2f(.5f, 0); gl.glTexCoord2f(texAbcWidth, texAbcHeight); gl.glVertex2f(.5f, .5f); gl.glTexCoord2f(0, texAbcHeight); gl.glVertex2f(0, .5f); } gl.glEnd(); /* gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(raster.getWidth(), 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(raster.getWidth(), raster.getHeight()); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, raster.getHeight()); gl.glVertex2f(0, 1); } gl.glEnd(); */ gl.glFlush(); gl.glPopAttrib(); gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0); //Save image ByteBuffer imgData = BufferUtil.newByteBuffer(destWidth * destHeight * 4); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, texId); gl.glGetTexImage(GL.GL_TEXTURE_RECTANGLE_ARB, 0, //Mipmap level GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, imgData); BufferedImage img = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_ARGB); imgData.rewind(); WritableRaster raster = img.getRaster(); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { raster.setSample(i, j, 0, imgData.get()); raster.setSample(i, j, 1, imgData.get()); raster.setSample(i, j, 2, imgData.get()); raster.setSample(i, j, 3, imgData.get()); } } try { ImageIO.write(img, "png", new File("fboImage.png")); } catch (IOException ex) { ex.printStackTrace(); } gl = gl; /* //------------------------------------------- try { URL url = getClass().getResource("/com/kitfox/javaone2007/abc.png"); BufferedImage img = ImageIO.read(url); raster = img.getRaster(); imgData = BufferUtil.newByteBuffer(raster.getWidth() * raster.getHeight() * 4); for (int j = raster.getHeight() - 1; j >= 0; j--) { for (int i = 0; i < raster.getWidth(); i++) { imgData.put((byte)raster.getSample(i, j, 0)); imgData.put((byte)raster.getSample(i, j, 1)); imgData.put((byte)raster.getSample(i, j, 2)); imgData.put((byte)raster.getSample(i, j, 3)); } } } catch (Exception e) { e.printStackTrace(); return; } imgData.rewind(); */ } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(new java.awt.BorderLayout()); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOPanel.formsvgsalamander-0~svn95.orig/java-one-2007/src/test/java/com/kitfox/javaone2007/frameBufferObject/FBOP0000644000175000017500000000172310614350031031421 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/test/res/0000755000175000017500000000000011562044310021227 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/0000755000175000017500000000000011562044310022005 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/0000755000175000017500000000000011562044310023311 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/0000755000175000017500000000000011562044310025245 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/abc_bg.png0000644000175000017500000003005110614350031027144 0ustar moonmoonPNG  IHDRdÆ pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F%FIDATx}{|S;9&Mzo-RKG`܆2s"EOe8}H+:/H򚢔6'LuN[t0ZE\)visiI$9iNri y^}YK{ssy>I!ˏRH!,dGxl~3އ}~, ͓~_ EnPZJA~ ㇞zN10$ F xs>֬l .Bi)N(JQP M}"!II,>z>?dSng`BŒ2 YRL/PVFa, 3("pfd'cbv qC- r9 W&CE=O&C,6˷P= }gx`F޵: f͔aFs(̜)Y|hr--|Gx2( JhR|A@L )^\A׋0|hs0.gQXP~Mr9.&Md2h-Gh9^/nwͥ(\P`R2r9) e |N00 =rr3zFƑ+Ey 2,\(Gy,En!nxe, aB]`d8vc mn7M.U`b9V\`,̤&ȡ24ªB&񵴴 "$|pӉN'y<XTSI^ osoE6Di|{[DC0W,88tF߾N|W"Hq`v9w0)) T*|Sⴴ^*4{60DeVR`KSG{u`uMcJ*tjN s:lݎEUbJ,\$KD ')4n2i4NYI`ՊCCd)-pǝ4~ABq _ps>)a|oʔl)L,xv {-W?[oqeM[h9 S|?=4Q*S+.Xg)M*|}"HS=bɶe>M hS/~Zl 9?WRqaA~ȎO>[ u jSvʹ3&Y>gϖTIͫ$ ~C?(OJq{FnjSyx3 vLi6ş;WQ_On|7F 1WC4U^0,>~m4b<ܥB'T_M>˅O\Htܛ Ѧ _  ĢHV('AZzQsgP0$F׋N'z<8r S>ODEX&C\yJ%AK׋''̞-C/ *N(A?_J17//$=4%/Ʉ^o M ٳɂr7mC-SdNɓa2>!ɗV\d1~@6;j<].z<'PUU%ӧOGGG",eiŤPRR޿h4ȄWLrrM:aaĉ’TUU ,F1ա!lYZ~!- -U(q;ts;ݠ.Ȣuuu;Zl۱[MMM 733Q9*Y^GrWWWGdE]]jkk+KvvE;!G9 q#/ת{QѸ;HW1*;[:zP]]444,t8G455iL555,,P"Q(U("\KX֖5{#G^|7Dؒ?@= ,% ,Z׋# v UUUhii-zX1Nw7/QSSӧOz~Acc#F#gA ^;j((\ۇ ,Vr >YcAThNݜD|UUUkIɢ444`ݺuׇ/(q,9\NÎ;D?7&`. %[ߩբLzza0H+S0˲ŋnlsUX+&ĮM^`Euu~HmQ;vp 7~9:Gccc /))zfL2 #,xtQaਸ਼Oڡ K1򪹹9l$htwq o?A?U'9F R]]͓Y9[W< i5YZN ^s#b͔)%##&rnr8˓.i5`ѭ8"Jwq̜yMsE~?ޱ4fgK.jX@ *q ,mDr ؞e吝ǦMC[qq$y-xwlS/~ʻQ$S^G8?$t@9+ܰџpD$NLkq:Qo6XrTgdK/Mn_,^Xl?^gGB~mO yE:2ђ+V$-96[Oc[N.4PV7~˛] $IQf hB~T$yE8555U:9X( yy\"{Gw[22P1A(WL&%}UԤEdPWWpBGoT4n!"iKC=ܙTc;޶]]ٳloǗΞ.<`0ʱʫhVdʬ:B҈fkR's25^DY.vl2Pv E,m۶Bhn%v ɳЍd8'XqKo/A!k՘SEXt`*!Z5$qKo/ Q1Ȧ($.ƾdM*,c4bry Z}ߕɊ C[M   0~?~rd3y% +5h)L766M2Yc`2Eގ;ZSMf& BrMh&|KuEyJS)0s; ^4T*Mx5{ckTdsS_u "eȡR-ԩ’#k1u!T˸mInq:Z̮'bO& Iuqy.Em:#AsJA9ݩM KPḑq{S1an(JI|)a92/]H {ӥV_]JcuR5 wAzEG"!}?QeQSS455 TVVW!drL|pIb1ؒG!GҤefcƖaXPF49$X8C./A^^}B^^='!?HMNj˕"2,񫩩 ۶m\lu/y33G6 GM66$u_59o cR8yr v_Yܜ:H; &#'ɰ+-"[ )k]] *sx>hR-R9ۭߍ[*QGt$ 2KȲ;zwӆPGF3ϻNePJȻN5"\,'$/Lx="ѬJh?HNDYmcQ愑$ s5W'.AI^KlKYf pB6pf;\wҮLR``D XyE.%a$+z^NfVUU'Z ܳllZ.IȖOCR K\@[1OM8a&HTHOE }@24sb f= 67KIʨ#iۉ$WgO\TEa)Wa­dc/TDQ(Ȧ ӧOxP*4x^"{UK ܦK RP0,z<\LgJ0pJ82y%ͺJ}Cttt`ռy(26dN^+ރV@.O\'ygΤ!KrsQ60õ)"{+=}?MF+N5 %$c54SX:0u*KKvQj4+HB-_Q@rܕm#Y0AJK 0!{ }@vËWc9"_/Z-Q`6 D۸-p 'ISȵexמۉ\,'pᰅ8h&&qV뾄> zNbX,HvP.`[N$l ;hN 5|#/g?ָ(1z8A>k׈YNH弐Xݫj^:0+p8@Qa;N#kfKGEU993;VH&hl`N|F,'dHR`BQ/oZ^HDLN=0rg+z^{ 6K$^,7i#=*.TŒ$oۻNJ&^en,8݄=kq -qԺf-G~ehhAfd }}((x,2΅)ՎE^^:bFs!KVL"+lIN ^L&MOGiģil*z?lȠL*8g!3Str|7 xӰy_Mlwݽ>_lφ5~\ i=FKhי2+^g_4c,hX~xʈ~cѳcNO &MGn|@`H.p(ۆD&RyglEmtu}v~g-'*`h^A ɯf xB{HL֥x֥ah(6 ߎr#q#a,0px,ߏ~^i֡σ hCpBׇ;b"{WV*NQ>2`FˈS*qFNQfxdx̫T'׾ AE7 FPKXӡ{t\P;ZS*9˒MQT/wtvC,CX%l럺A=wGj,WJMjBٙ3+Or&Ocig' Omr~ϕ ԩx1?whaH脩NHc H_l͔)#[N\œSQ8 4rbVvq nބ)_qXՅl\~ҔVNZ].חHOun}#GII "j",OSSN>Ħ'6ff NV+Yn]k \tHa WڒcC|n<8ZPbqvrkv6ҷwɫD,FIEAkk+*++yc ޟ:5!ߏŝI۶mm^kG_lN|!??!ꪪO3>-4t"e}Q;Ecc#֭[-ND_D=='wy4U ,3)ybUʨ(Hة++~=Q^MD%6zj9^+,"@WB.ÆCҍxUIo7p7tr)nHžQ$FBB1!- EL Iᥗ¿d㛌: x_akOLͿf* =pS5˅ĂM-F#;K$:::P[[;>R[V"߳Z_zl(#cTӠU*Fǂ PUUqtXNkk+&l9?Z 9^m5꤇hxu8LV$|K"t1*BkĀuz-:fdU yp~?:duP09rtJx\:χK rrF強X 4VT4&0#6ffrq߶pQ7(XDXь SNjfsBF k32N,MQcݏۼ&H@۬p8/qÔ)ؚjwłGغEɤc}hi }k32f88ppdfET"#)JTb.M2;6Zxj5YR)aZE420 6 MI4X<Ab>:6k( [] c.N\zMsR)evLƕU*y $W`5@Mᗾ4:uaQ;~k~ʴ427%cpRxgz=:ӰHY~7΍u*7ffN 2{; wp<7£qՒm %N<VH&Lܔ*X,xbppPGq{5GǼ^gQPLJRM Xx|pp٤se_/3xc]R9J%jK!ol68+OK߾nl9AXzŅsuI )%4Ny1x!ܔI#0 N<7 צ8P0g42bVZ-?WhsANj/8/#B!vVtW&7;i2a$=hWBP^htohtQ S/5¡g%24,SRdocՊ6[CYYR}%n%E 'AH:W\ B}4TXRԉ/Qv48&`)( XyknR&4}Q=n;%hT8- j4X.I;xj 0WP]& AXX,~}݅=hjr_\ Ƣ1)Xq`IQ@eKɱz%'Wk$s`͍'ӥRT4*h_iU*GOap¿N ~Y?(-)&}DO}ˍްN~(r) +TL\'.n|vBV rϷ((^0"H(Μarԋ#8r6IR(EQ4&MZcdzqけa˅AQ&bF XH .µ4A/-Ghi'Nxa2wJh) d2R|!R Idqvݰ|8l&-v@(: \ ٤#Rz>?dSm'xM)\8fC\̚)P5Sef΢+G 6>|1ɇ>;muZ.P\"N+99eR V?fA} At ܎_ZJA.dR )LXlc?O1p:N(rɈYz)B I 49ļ>IENDB`svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/abc_alpha_normal.png0000644000175000017500000012710010617140334031221 0ustar moonmoonPNG  IHDRIDATxw#uOuwq${. Od}!9Kr4D+v%]i?y8]/}{""@V.Ɍ88'Ntȓ'O>F1K107&I4`e@ix1ijZG|s5&~c 9T#eۀd@OĂǔ 2oQ!eXæ0hʀs-[hA]|Mnփ' N!@bJڀ9cO|+"OH@`H+g0IK00N.Zf-s~@"bOɰPf, Eg$h 2e@fPTf<{25y,?CT*q0h $ XꔄD{Wi H|+!]A!8 VI# )  {~рGx4^hV :- 3o++ g)OCeY\<S2#r_ܢ\gVeej! VX` f.u^c0P &Xfx,Xf^ERV@ Dp$AF*.\ \p`0v^߿_=1=,.abmvT:AEŊtd4y&Yц {'@*\sڋ`2#''i4ƞ4psqs&$4,t d'`DZk Gp6}An 3$nJ;Xb{*2:HBWtK(8UL޻Gs/Iڢ0["M_|)p1#cS 0NhЁmU7a(8 H&8j"\qz/Nrx(-rJh0ɶIN0Qiי^|uOWi qy9Boc74oc^w( 96-CTq 8\ Q)`b C&H7^9B`RP1ہGj'HZS@ŊN{IH¤;P1|-GF^Q!Wᕜ wF#\zmp+7(h[m$\5+0\ [Ax]qȓ9ottz%߻AKp8ӽ C5{(GY\+ɿuʼljͤzm >-M vpFl'0Rܼ  '2u.f $:%䕱lhW>\ p6-}4`sÆF p$ݼ.3AJpf"gb$ r!%Gd*Eξ$AmQۧG6N? ucVh DKp$!]?h OOkι0IJJtЖ L2@2߳Mkޤ \KߠŷPe)XdrJgL=% zõ]=F\G yn0p'OP@gbvrJxoH,]NĆ$pS7 ҷM߸IyοwNXH^S C! YZ^G4.sq2G:<2Yt,:f a#l9:>wԢI'&бlߑd㈎2":'˒甅plY,528hUiU#s ww%I|D;%v1$q,Id ܓṵ6L՞i` gp.S?smBd۵][{Rk5і)-Wmop[&J-vxw̓ DDy#ex# #5:-wn@lPdbJ<-4:MauG Y9<+Toa 㪝h86㉣sxn;?#2ʋ˖#C>]qYmg͈ui .mSkĺjKܗq%l˸e_m?@bC$Q ɻh 6nnN>Cv~ Zw"V?4+45Vk@#BV{xع#KGV#c qƼns*q9նYumˋSjO|wLedMeqEq|d}z6$.Y[ΰ8H@3:y>}{6?y@vGoө群o gY4#ܔ y6,Rݮxhjl0yDFlvNs萳+5a XZgF2NBk䃡$08t:r!r@9pNeLYRuNE{ùdd^lUEp۰=1~۔F}A"#{1q,%2έ& R M@V9&|x"ѶvR y=lg-h Zp='㾝i sC% oi=.捴@$A$|&3@nt(/>GGx7xh8aamFU@`l9щސ3hRrB3!CWScU^JMt:s$:!L~o. kEesJ#q#߁ʮL,Yf8Yi%c LQS΁ӛEJc 1C!,.M^qL>xJC7Wi YqZN%qe4cp8 R ^*{@xȮL,&=K}ƜJ]PWr<w q 5x -$@$ 㼢8DZ8,vZ;R$@V t³0g 6OUj&YOpQ$3 3, =Lb"BrPQqn+0$+V\Zapf8eacX4ֲYӏTiA1f䤦qH^H P#\.t*Uy.brcP"/q^o2ƇLKi)Y~ﳂrl+mRP CXTs00WsI>m)hy`ƒS *8\`cZ()! ρy2]z34*rEF@ \mbM lp֐SxM͘)P s6 SM4;Q5H087#LcW7<R)cC?9}t9Qy'VxD=בqsWetytUx 0 0 F+ugR*JCcD\FSN9e`G >|O?FCDAƤ5>/H-" ʹL.fcON1Nt DFjYCR&[J84 .ʆ2oi_x?AĿ"C jUf&)M}*(j#ۄGgXı,g%@X๐^hZRn,էGL%|l mBО)1&f6eo7T,5l@3`²Bv<6H IwPzNRhWF9j]DFRODy#9{^ĆHT@ehW(O[G2~b{7B$<HpD­`#dc -|#RP͋j,F*R:{&39!/K.CgA >1@h\1|4 eOjVK QF-uTᙔ-|,1'!CA[0^@UJURZT r5|a_!y}pk"te@^<;x IDE a0Ԗec8s*ۏkᏏ7@{$kDۤ~4-G2,?egsvL@{ doG17^` G v!L"N4RVO"S|O@>+_P=<ЕG Ɯ8^ƙWS8@2Mixg СhK ihc@X<eces[hiSfs/\a̬NN᭞8o hDG]/=qIBIޖxn*YPF)X̐ { x{a4_ad,Dh(ߣ,b$Zv0q$F*UP Y ?D޹N?sE =wS_҇}w(<އ Xxhp [b?+qA<>29R1)M2#0Q|@ cYJ+@ ~RZvxRC&#uGNhT7X /BZ<iPKx,C3+`f1x y=g[y. 4hf\9x"3p vo0,؀Gf'ٟEΫO j< ^0PNQ@ ]ok<89biQY,ַiuCCYs*V 9ݗ={NZ,xAxAOmyq!pTDCGy 68e*YPF@6DrKa!.>: Odrc uMD3@ "$; uO!Up?E?{.;NwW߻FSX68#d: <]G $WՊ>8V). L+$7:>Br*Ur0VXHTh0R  4s<O_h2S,Zp8|<- +ja`F8-S~Sd2cጶy0RFjZ:˴kUiyx;KrYcX[G8}^gd񚐌:0<<)?Շs0~d*'ؤp c(d%kH? [y%|GOI7]'d:UͭvBtF@Hx RPH1 0D6ƫٙ7lYx PapT#4RFp΋iHbτ#/bq&L>3ANDdyD 탑aZ3Un|@ }±O$1G`8fx#& jPܯy&;ߞB[pk`)ۨ(K akdmJӲF!3O8^9VY \l^Wqxcg&Mpy`l,;?0~F=F@3Ny՗v/0|X€X~w<<){g"t{ 87(=a7qp#t< cW5 mڀv <8tIi3!hp[@d}G)yĕAOSK5ʿ8倳 9q LI-uckT ]GIjHT"&-c_TULzX<-y2e<~{78c _e_ݳ;aO3XhiΫ(*`8BD)91%X ދz {OsH;Wѷ/[4f`中VYyҹ'/$^JRfW!*q&cdhm r Њ*i2h@.m pqe@C[,m=Z3>(2:$!ž4B/XP͓EdE*.Wjl]愒t' kʶ[إv6&nA"bC$!=b\A$ߏF秷解dG# ӧwn[J-Vz* 8:Bg˶CWNA򐄯 ;WgU+yNgpyqGZXڄlhyϝ;3fp\x"0f*W(38, ꁸӈn%@r2z @kq LE;^5k<6Ȉ(4BK?{x7pKD^g 0v/{q\ m 8L8vOQvHRz" 4ަ>آ$8a\U 4Ļs#UY62lZ%Ar!#|EnUzB# e̵)L8$aMN@+3 8BC n@C1>=@Zv&ao6+KH֞@4+12ƷDR8I3B 8ESV0$!b#jxdE ,[%fIZɀRx8[P) u!1|UYJ_MF=c4@}>8޷0V䀲NZW21J5s%kͥq 8)cō#I6m&{Wal  qXks!Iˆ CH?7-24tHՊUޏ> d@5@9GWuxt::C#W2ji6*Ur(Olz!:@X [(/D{kzkN7o$)e#ҲL"9a_lI*SVMH"bˆHV6zN}}WE/\3aG\.X K\P: r6]mC:iNjԡ½ͣ|E8 P䨑L``aO0(gT_1:^d -Tma5'J ~xxS ,c8)+?!" "J7#BO@F?* _G @R2pZ_ #.:7FڨQ{T-e[Jהu~~oStNYvY S(fD qD텴8!J+g@8WU;^Ѻ7U*@YHfFcu:0ց@LNTh!VG j?ceFjX1''EH)+=Gc R۵NujfOSU9DVs7_^,(^ㄗ[q>BWnP}$~t6J ru䄈c>ĕ~N&v hxI  *Bvqeb~|*"4_R&.OWhWhi/nQ\sPe G!WI6HHkjv?᫰@8yXUwh c]X-X c=(@`WX8> RhRsrN~ec]To,BUQZd\^^'.Q F2"){}@ycd3 s8LdEN_/}hӻM쪤<7ko/ә_nm `h_h^)'!4ݽ(Zc/{#7cE^B,c)mTk 02PcY\SyFUZV%DYeDwj.BV Gj44Q&e*-Ϙ S|Dhfۈk -dps ȥbg!.Vx}'yp=#r%#aC yN(8lTmب lTabZ$ E$\ \^!ɟB/o4c!jH$ҭs/.N^]Gu2OItq2}vzo Q( ^HL4 qx!ƑAPŞUu@8_OqYPXBow GT+aWC7 ؆gpsdidah)e `q/g64wJҦ߳Κ y˥#(ZS# |A破; X[Zg @x =9g,zU:#FZG[ɺDKg- Y6Xhڨa_mTiDD"X cjBq]d~=ufc.ķNHJ*QL9Qܯ~51zgר,=\($$ni@e_qΎŃvtհ:j gpUޠVۢ#u1bQ$Xӻdc=hk_{9W1+0s/VjkFGl(YըtJeh<-"͠=F+F<-Wʷ!Ȅ/*=@{!ҽu$KPq^jw$Vx-H\Xk (QON=އaQQ{mx6jJب p^k^4a2r~=~.$cگtrz6 ěο27=fygWOQ \Ţmd!>5U˂᫢K+=|5W<7Rjagp;XC;X]XŃ c oQU0p ˂2PBrP*@%@2Ygo8P745)1ʦއW&O7Xȗn\4X$6\4.As+ ]E$wכWj ~qJpI<+@}lx .),lԷGgJIf^{FeCҏc}[;T hURu#".oK[_']8{Pn&@ޡ oA 1@rR5R*x4SHuݣ"|nmk{25*}r*Zwdc [Bv X+@Ji9bX x<`19AE Sɂ2P.AeQ<*Zꔫbz|G7qty4#<⢆ U,$z[ͯ3`AC,xgJR)%'A@Z V!#xn>ޢ?:*ۨٚ4hs)Ʋa,Hɐ^Ȍޣw-eӱr4cĐ5|"6@;W$U=Tc/ߣ\q7oI/|z\EF a 1aIwC_}k_q8kd\WՈ _T!29څkXe20u/•o*<4tJ_@} u K(=[GzsBO.^  AWȒ Iw3rWRA{-@b2m#5Xfm a,+ cc2}QKuĖI緡ī̈́/Tʺ(?j ֘ 38MLήa([k{ 6@l,*j@^=1eڴ%1~6j2Q *1~ A@kmLo`6)'{B j6=|^/ܦ)/:1D*.WE;ʆe lNG+$pU.9/ԹEU+ cMXص@#ghL \W?ùO8^T2JYTel Q|G\/V[exarB],RκrL8Id kzoאO+9T>=6N>mb6' j=%KH|q~UEXu6=t_oDUhmDK8j>Y<a xXDDdJ'29EKo;~sN*hgc1ҩ6VN[TekQ8pNxtu)>Rp!{ Y2PvX*FuM)ˀLL|SQ"< ^:5_X.'W4䚹vZf-92Ta@̕ >yMVQU~ 9N\~>5ZS zƼ*aI7/?ѿ})YG}q&ruzj =LSB0rKލNR*+w(.zeZ%̻<@YL7:e`>sw>VM|2~SŎ{jB0V5k/a=gatd[ɀ!F 8Dj诒WtoLR@Yg|0b$a07]V ScJc $+ 7 "V? @6B?j?zZ٨:՗Js΁zbJ'џ Cၨ D}no"N;;-[kqAh_7 ŃqQ^aq51 c8S7#"3;p)ʽ(xYΧ| ~'ĞVsQk { c %Mst)xaUq"@& J9( P/&%| ` ^@O i *,(QA"|'2^73wNZq1(ʝB2 #{2$;r ɢ xgu ə @<{('ۨ}29לmX("W129eݦ[4b5@ 8Y %Uw-+q|/pF_譖r,a$q<.+)u lT1p'0ҝ nhQ| ("`+eV%x uښHXj^@Uy0־jcd]TPi~Yc'6O JC渔5&SvN9"sP @ex@ " 8 "ޙ ILMgs<:^@mʙ[~\ ؘ-HJsRKLW4wcF6zdRZ!ǮF/臱[-)٥K@f6 lTBs|y;s^ۢZXtd,W?o㷏'^(kzuq3|̾Z-S20-ld-p󲀠E/׆pEZUDxߋ9 C <ec' o2m/W=Cȇ8f(RSBM,"> zx9+c}cBXWo_KmeKĎX':-5K{R.oNlP+īYd &%xx&s88t:c6*N,rfYPn\UDgkYmmN\}cS9/q*5sWY)cp0y ~;3rKjfJ>ک*m`mok)n+*lmبFO]J2ZQȢb[}c/u-Kk62}{d8dmݙ+ mQ&H\ɻ_>OwOԄ |"IwxUS mW0v%vZefJr'fa8yn[|.˅+r H'B2A5 cuck$`56g2mhi8 /JTIRII @0c>Qq\$@2 x!0y.sSȽy,'&rH&q)^ W\JņRH^?wg"j/BD$KNo[F:ru6nF뎒 @Z^3J\鏳W7ś{::{={^ZAHr]}Ba돮z o>W̙ohI/.vbvݤt :b7m1.`C)g.Q9Ul\=9t{ʪ=]Sf!+ʇ(C6m*jX0V Re|&á@a)$ed.P%xk; ,!^m,&CCr ֶvaKŦŸow'e^\?-!~c9ako9 2¶qF}̷4Kۤ9lR#|eoJmŽҷj^;wN#I].o c*1ME'mg}7<37_{3ª}Ѿq+}y7(+2G{xJIfDұC8\e0NC9!fe #D@d#@A8{Gw[ iJNniBkY~{PmԱ"mSRM 6!_V\ W+ߊ[b׬]./D0҉*D6nk .v]?Ŀ&FNi0Պ+Y֪TwĨX(4-"1-R"ͩ2]uhW(e|e$|NW +*⊺Saƪ4X/=W>5?@Z w 3E6[;E7Z2Tqv 5F== x wBM<&4+&/cXex),'|\"Tq6()0I8QMnnjH i)1@|~C[lۇ`6W1QT'fD"jlɟnnxAj@sKYZB5̆@Ddır4X7*SxSaLS"O*2y;-&-qQx=Sd( .Z41=?y@R*:B[=TlRبF=w] ^mb UT"H7ۻY_sM\NV??2Z%5Dƍ֋^]JU jn ڳ7k!Vpo\ŮOW}+7EJ{OPnhُl*{?Tj BE`p.B5>a,FSG TxF}50dSձ ̔[ʖ{6LP X{}>SM-<i,Cyi:E=JJ8v8N=^C:_a^DxKB˰v?P'6$Is‡{<᫜թ{3}[G Cngb_ ' !SX2Nĥ)^̳wdf>$aXmO}/:A$Ok?3 wʯvD(ۆ2}[b{S(a/2@ HkCQQAEh HMH՝ >a,^0dÝ&*@l#,[).}`PbʘGʘ+\{儹)g?I 3md{s2q2EzKozI^?>)k^sAMn/=%x}.(/a~6F]FbM "# J*,QM(Qjo">o4>G3{KGȅ2@s-E(N[>^gl ~F:su B wnE!fz^c^?䊱\ %}yZ^2@H9=6jmeOR2L|3@(d MŽ@`+ yiMf5A|$@1CܖID Au3? fb~Au/ߊ|-_+nж'8A$Ip i^J5|esJfLlW+]`Ck4c0[kF Beˇqp*K ܫ&Jp>ϘsC!)3"jCc-aG=M93WzHL Y iN{'< 8"}XiB]4N1&ACxC=5ƀ*;">}9uEH <ɥC4{jFQAOFl( _SK|v**%HxΛltv Dž &{gQm=}G5YG*Qpǹ5DR "Y"97^1 Ջ&r㺰;oߋ?N3> 3yb'O&'<.~oeWKKtA ˕'E/ Jȉ1F7%D(+ >1UWO,Ӿ >6}0fT"1z&'D/Pi̶r6JHtscǜX <:4u盠q2P9 6aq}yjJn[ UB dSD 3BgP޷-l ?m~lT|d[ڨaI|F ?9&5ᵋ#<`;S^y0<Y w{]19V9Qm ֛Az#!X_z}o+u@t|:ۖMylcwT.υ \-TJ{gųNI7b">,"f].Q ,eƉI7vb'G݄Ox؍}@Kt4VJ+]jKg9|@3@ gQX+S$) i$"׎/)xV *1;ꅄq/W0rj@}3n<= eY>HCF=c'llTS*b,x8W%gZ-❳yܞ9|yCir[lC*tΕdƸB{Sa {:@t,B;d=HwU@d PgB^̞Øbl~ |_]J2½i<^Je5h}i>žKP(q?>$Yb^ԨjF`A]U՝UGkH!RPY"SFm; 3D4H!"'^66ʊ($U)mǽJQc]ov]ʛf5bʉ,9O7*: ǀ@ YIE[aH+O+y>Q t5y%Us&==Ǥ=;LQfP3" gu+ ce0V5嗍u$ws Q*.I7scse|*[PU׺TNUI.%oc~1XB\;[x'/d!uFNS\KGU)$W0y#"֥jwxFA$2qߦ1O^eY>1hZ3Ԟ5@4vJCİUd#L  `,4z0ā-ܹ;◫.5DDl" Y.5:Xk@㨖{}%W^$`3@$N=N">m3&9st&ƚ2Xj/x@z&Y 4nC8L34A#d/yQ|/:Q wD5@8K^-Yw+S ylZoL{mb;"ѻ odl@~IIA Irhn?/3ȵY'|"%dn;31#c#p{bt wz~P˷ůWeKպR4BY{"V$ܧ^!VĐRO =LvvW^WzQ"*|Eha|1؄.k c-XX[aHssh CGs +tږXq>*i D:dt` {$LaL!pXB&p}OGؖ>oH!s%9i ,+j2F6}KJ^Yx"IH5M ɫ&Z G'HQ|UYrM&ӺtdYndLPKBJWvaw B2tURK+wş|#kWr^b=[w+DT/5CD6:r{"fH2@jWWq2̓R78Tz,!|YWVUDa6>Z00V0֠GQr/F=z>}1 (Y\9\\ |'֧alg,yEx$mVI)$ƃSFTD Ƀs6 B(ӊT3TB>=Hj;"iD} >Ba<-"8@ű$5%LRtQ*=frL/V B3xo! JWg8&dgzXI䆈fĄ_Iop'*sg>H)Jk U4vUe쨭oFCWQql}xZl~YaslN4隣k!x!mP@}D ԗ  %^QȊ6t.R]dW%ffO\qTU68(uZdxF| ?_Dpd g`0i5drLo28/)rxp S1uhw@izL{1ZaxACj!+`Qh)LRzrS'q+ſL6bʻ<c'Hm ?4᫲A3|x'd#vn @|X~IW ?Xa7ϫT9z-#0l (_M:)mƮh`*005Y<Γ`-ycShBr!c`0.y_ G!4~ёB౜wH[ZٮGfJ{z#3<b LP\#>z[8y vǹyC?}_ݹbָ C\:DrHZ#X~OpXУ_m6m$4mUHwE-IDATwAXea,{w ~aWE5HȣBf0ni2xJ+ecWQ+¸a0 *CdZkk0z3mX-!x ]ɡ P!~x#Q˸>簹*Tb||[ <{723%& "cG>}Y~uQ( 29 @Pgq~XD0)KE0V6V@Y3e!JQmjB\eHj@b)&P<~3 "^GVxpe\St]u@™{k_s̆?w.?@rKaB$j@D7mF,Worύ~Fnj_W'A.ՔUh|um zXgR(dC\ /2xETBx^)c ChQn<{P8_Cê~7|A-1V e%uf> Я/WܟDe3DitӺbTΤƳ~OƱW"rbPJUJBiE:`@" ^gJ{Z@ 2\R_̓Hs-./`xx-GA @gVJWoCl@dx"" 4<wY/,9raa~^nnzT/dd[.uM6_j'L">@d~@[S{Mp/r89`T^U;ƒ!)V @V )geH(2<)TQjT@;[G:4<E6!>|+qG :3s u]q r$m60r;־y4# _W 2|k_oQSiS!~6%NƠ"/ Rnx/4w*t=7LTY*hF e!Vx" ]G5sE{j,x`8```{ T}kujL/u"EưD0ySBh 'j?1JSE {$ޔL{08$%L̨eH-cjC8^UrVxfXd#ʼ ,-SnMy?`>TVm)cְ/J^Q(iuVШ#$sȊ658JeC<>Wo>Rˀȫ5Jh1D$$I3;U-7Lw-+lH޳0˸AV7^{2m GyOxKShU=kc0ԯblKޘWe-QrjJ}O` `lc,A,@,jKc$I$Zhp!"5DasԂ^ae Z@ϲ,< ^ ɳH$$(Y~G8!`zH>Ƽ#2CLfYjF)|n@ )$EI˒GyCZEic_P.b<ӳ*WjJHЙXjl} r !)BjE=QHM磶jmlO ^(0< x]UZ> x|HyĄȯ "/ J"TMB |$\jh H<`:j^R0Du$i[UPh*OO1j[+gT C"jƚ+ zX|ZjLP\U=cN|'2j_DM@X߯YlRjTk]iFL &ڠFFP_A#TIR]UK6IV*؉cJ<#8(  04ص!!2cX RYuVPC'< ]QKR{WM1s"\{[hx="ye@Ev{jژ)7kraIʐ¦ԟ'9l˲! 0B#'<H`` >NHj?D"8/&M)@& ZGWN1w$?!n4΅LcƮ;)c(I$ Ÿ鸂/ym1|V98% he7kc]$RE3Ѕ684<48uT$<0Y=w__ŕ+kNYuo"¦0 R1 Rnx#++,+pO D!Y60H)C-|^' zT3wa{062~hWXe7 xJ%%VƱd𘄁$W0h9j5B- < ɲ\kQC;`jePY0J m}ecH2 Yn>ai4+M='p,qX<C94~#,'L`p 5#J2,5#3Uezd0]`8iuGE`+ۏFi&]# h; aԋ{#,He l'qS̞vjS;҅-O1*ݴ0L6nI5AƸrJcq}vƒ^5G٩/^Q'xpI )cJآ81!̎it6)C*dJ5"O-Q ~5æPL(e m@ee iO$~I|iSM{``4# &< <.ϣ6-.^-}pcG z o^-z>uz 3DZ -h8^u y"CHeio̰Ţqceq3YՍ"P }@-RhT;pXZWhtVO*1pt\'b8rAɨ+o1̀s?#9'l@K_ɆR$+Lq(EY:O$|>r}"0Q8-pھ1Jg)PaEx%x#e+]ZI@ 8<~#BIc=eH!~Oc:<1G0<Q|Q#S-KCU-᪌Q?8 4(Tmdz~K\vCbn莆ϿyK|QDLqH,G te(jrpOŠ 2 Ѣd:n(qHjݓ`h:.Ujw:62Y:ſG?c0aóJ0;(l5Eanei֜1B,CiVRE% iNsDUB Q(7"mN`>)ɀbhEgZ*$^uq>K,`!BX1cWcJqd%1K(M(a/o dc-S>>sPӥfp2\*ګfS 8k_uҕb ߏ QBFO)j @ ql=4z;TՉ!קY4yn(%k8ǚe2Iuh3y".Br1( 24Zj쐮7FJ6&H 8Gc߽HX=\i$x\s/*ixh:րG qܔaZXИ zQrשuq#GQ7<*mq=q㿊Ko#c(ȶ8amq]3*$/o$o kys}Wm;ԍjTJlS]" +MMJ'n 7SW-6Rh )fBI#x;ПDZ 2n&-F5faI*Fp1d veHeN4BX2Ձ,]'7UKNcH'h!)cp~ajjfvFG۲GBs<ƟRx*+OX8|HQx$CXo<8PICRe%_u9M`4QU&e\ {nY4SjIIΥl=H|bX2=.J?6eAC)0%4hFJz[!3x{||<>7a{lپm^܅,{(Y,ˋxT JE:0mN~l0IwK6F rC*2ݐ}![XICX5cIYU LpQGQGy[W?N\ӷb#iX qoWeӛ'R5@! IjH}InZM70M{C~{h0kqtb$79/s|ᤚAk}  Ru g\yfa *YFL?TQ$VFw4qQSEt! iG6yl3ÍI[o =ƒ& cich޻y ~t{9GG X|W#kh(Ix#Ly#"q-/JH̬$;z%4F;L׻okv<, jn@ɞPl} f3ܤ"mR.hFbeȍ%z{qmQXbLc52jEjh?wm;l8\hGuT xTUY/ܥ#zE}G.>^--qu1ooGX+I $Ж$$J]ic7ԑ5Nx|mF3tsKQwpl8ᆴ9_Cw+i:gnɚhSg -XjPخl}?0D%v?8^#k먴Guf[,_+^8^$\O @HT+/?Z.I&*(_#~o;b܆O)o$ RR.$F z%;Fz G{y|w5{Q 'L8G<.xQب~%^Q[z3OMIE?፜| yu]䶄G7RF&RkhG6e,{z%L=ywoа] vʨ:4<ev((OoW7b啻s~ȅ ںDϻk=1G'U $7pIUZok0 )#@6YUmG;x4&UmMq_so#aĶ|_x[m1尖 VҵFRI$yc$&& 8I54]绀&5R38U%7V7bu\>cH/N.[u1z(1 d$U20I{ ;@ IhɤʵШcpx q08.mۢ4Ԟg[Y<~id"^ IA^ &;y&-\mb=(bpoMkMX0qA#[8r8Z8}=XywM綟sĵ$vHSd;Vdf<0I$!3ĕm]|ڬtCmOzڃW42m5QmG8ܕ{Ip~oh6 uTd呸AeJk`b&~^P}J~q K QCTup03< WJ>K[bg߉ _~-q 1HNav1m1}1GH&< I$ &^/;PG Џ V`B0CTYp\ކVqj[Llkř/F,yyvG{p=z~C$'޺-NsK }&^+§DVb#IzaI qs(.vx%KG9BC`ؙ΀ayx{}] &q/xS7}S8D-u#wũT#kw.Ȭ oIOdI+IA[$H:n2:ͤEW>d@N`;: O5A OOcY&4(LU^Wӟ|/b Tgk_'cooD򖈱W$P%ML;+e{mf# }O'ggX.X;#i^vI"&ճbߊsZ,~pKTV7%dIb7[o hj JH\@I svtv~X 80G@}clr.6ޅ0Lh0(22,ȻQd%K\m~~z}#a&^'Jzix%^@IU1L=@ QV;`HPhYpM1XXo߉wSU0S.&zރW"0ǧa2@ N(>`]!0 X|٥ ǭN"Ko"7PTlh"ى¬FͻbX4VV|&J6L ObbG0 :"\/+L#̕ty$n[.Xe T ع׶z7<(}cݞ5gҫ Fp{ #<5h4Zs] i| h|xK/nb-F&!䙬d5=)sIdIM#7PʍW;~ފL\a&`v`vc|vk~λ(\0*bPdڀCJ OMXϿ4S4h)VawD;E7`2- yԤ7T0iR@1b< \a/7X{?x*0m}Q6Yx0fNv^'`0ƤrA~v[W7E{bb/5%cLSw#H])>F6e ۙ@y܀$B{/C ~`Pd:FҖ(cT1u1K^_s!oܕ@i@yJGq3o[wE;0ed \ȫE]*ܕL, _. 0 2{7jc v{L`  Mh>0Bwں1/BSv;mQ@֧d}h"κ̬@#Jn y()6`(UQPh~)4K ?҆H.z?צ\pL`t12n`PHjFyŗ01ook/#H\;ɫE;2]ʚ(eJ>mpMM՚a6O *.j/lXܥ mw }c|\r~^`0^!x@E\0!c0V xU\ &Y ?7¹Mٰ)z@P(C)bPK}uTnMt(K]2~4ݨzr>!Xy[v ;P|^E<&+ 7E߉*@M2vW$?-FЇf}pGeb*Iy@x-UP6ab<<~J;=/zlyK(6g,`̰x~~]L{)`PxĆ7ܟ@=qܼ3"R '/5TDF!҆HghM5I;U;m6b]wv ;k}ףg=hU9R5,<&$k뢊u]L} (~&<*'"_@Og G PI.R0AEz*rS8=[_'0 <4fcԄn2~ ^{c<{e~AbP,*P›wED^E^bDBVbn;$P*%@eyK`D0 %D-}mrM$?ArKRᵤ4/\,7HvR0}~kg~g, ?#08.Hdp>D2.nlҧ7DK f5Gk"sKa<&Թ/H (Ю^G&X0.ec{ZW!|A荻"MCY`f`.c6^ۓNs<̬x9=m]& /O_4T oEܦLP s4`tR0XpC@.T aK5-ӦIIz?+ Sތ5Ő1ASsx7hpC!o.0%p {Ƚ. /4$Ib뢀q7A%, ہ:QdG V@TxeКK 4*Ф?h7Dk8]gl d[cl`HV% C- h4>ׁ,n 9)26D\~ 2dЯYK@x0$ %;s `xU@@p?ta kt,x Oz㞰00¬`mGc֭{ ,|nK8xΕ,32KP (H@ (P@(P@ (P  (H@ (P@ (P@@ (P@ $P@ (P@ (P  (H@z.*FIENDB`svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/d.png0000644000175000017500000000727110614350031026202 0ustar moonmoonPNG  IHDR>a pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxJQD:OtQ.yB.wAN,;%] 'pQf(B((73LΜF.ƛB@ @ @ @ @o߸7ܭ7""]<ҿ[vT?-+"NL,+"T:*w -jyվ~*oqgU.դ\ŤLebYat'>81{mὌ967P\0"Ļ_r&[IΊ!evFև$;dW+R,T;~<+3= #X)]WP4?*kC|+[4?~SV`rt\NC]t9q.7=agQUbմ!i*@_K`}%'X !?tG! b}v{Og/@v3@:W0X1#c裠ATkl;Qn_v>4vKu|P=q>Z ~ǿ,+!RheuV/ .ٙ*T:.Am>v pzײ"@cNˊI~Ty?y^CV:m&fr5hPw7ۻto,Bvm}H>%%4@vT2O@q}ljfx-w m[{kFп[ @ @ @ @ =9cZ/`(IENDB`svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/0000755000175000017500000000000011562044310026513 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/filter.frag0000644000175000017500000000304610614350031030641 0ustar moonmoon/* Variable names must be all lower case */ varying vec2 inset; uniform float delta; uniform float echo; uniform sampler2DRect sourcemap; void main(void) { vec4 sourceCol = texture2DRect(sourcemap, gl_TexCoord[0].st).xyzw; gl_FragColor = sourceCol; /* vec3 sourceCol = texture2DRect(sourcemap, vec2(0.5, 0.5)).xyz; gl_FragColor = vec4(sourceCol, 1.0); vec3 sourceCol = texture2D(sourcemap, gl_TexCoord[0].st).xyz; gl_FragColor = vec4(sourceCol.yzx, 1.0); vec3 sourceCol = texture2D(sourcemap, gl_TexCoord[0].st / vec2(128, 128)).xyz; gl_FragColor = vec4(sourceCol.yzx, 1.0); vec3 sourceCol = texture2D(sourcemap, gl_TexCoord[0].st).xyz; gl_FragColor = vec4(sourceCol, 1.0); vec3 sourceCol = texture2D(sourcemap, gl_TexCoord[0].st / vec2(200, 100)).xyz; gl_FragColor = vec4(sourceCol.yzx, 1.0); //Iterate over unit square gl_FragColor = vec4(gl_TexCoord[0].st / vec2(200, 100), 0, 1.0); vec3 sourceCol = vec3(texture2D(sourceMap, gl_TexCoord[0].st)); gl_FragColor = vec4(sourceCol, 1.0); vec3 sourceCol = vec3(texture2D(sourceMap, gl_TexCoord[0].st)); vec3 sourceCol = vec3(texture2D(sourceMap, gl_TexCoord[0].st / vec2(200, 100))); vec3 sourceCol = vec3(texture2D(sourceMap, gl_TexCoord[0].st)); gl_FragColor = vec4(gl_TexCoord[0].st / vec2(200, 100), 0, 1.0); gl_FragColor = vec4(gl_TexCoord[0].st / vec2(10, 10), 0, 1.0); gl_FragColor = vec4(gl_TexCoord[0].st * vec2(640, 480), 0, 1.0); gl_FragColor = vec4(1, 0, 0, 1.0); gl_FragColor = vec4(sourceCol, 1.0); */ } svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/filter.vert0000644000175000017500000000063210614350031030700 0ustar moonmoon varying vec2 inset; uniform vec2 size; uniform float able; uniform float baker; uniform float charlie; void main(void) { inset = gl_Vertex.xy; /* inset = vec2(gl_Vertex.x, gl_Vertex.y); inset = (gl_Vertex.x / size.x, gl_Vertex.y / size.y); inset = gl_Vertex.xy / size; inset = gl_Vertex.xy / (width, height); */ gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = ftransform(); } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/filter_redGreenGrad.fragsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/filter_redGreenG0000644000175000017500000000021210614350031031635 0ustar moonmoonvarying vec2 inset; void main(void) { gl_FragColor = vec4(inset.x, inset.y, 0, 1.0); /* gl_FragColor = vec4(1, 0, 0, 1.0); */ } ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/normalShader.fragsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/normalShader.fra0000644000175000017500000000156610617140334031637 0ustar moonmoon/* Perform simple normal map shading */ uniform sampler2DRect sourceColor; uniform sampler2DRect sourceNormal; uniform bool highlight; uniform vec4 lightPosition; void main(void) { vec4 col = texture2DRect(sourceColor, gl_TexCoord[0].st); vec3 norm = texture2DRect(sourceNormal, gl_TexCoord[0].st).xyz; norm *= 2.0; norm -= 1.0; vec3 lightDir; if (lightPosition.w == 0.0) { lightDir = lightPosition.xyz; } else { lightDir = lightPosition.xyz - vec3(gl_TexCoord[0].st, 0); } lightDir = normalize(lightDir); float cosAng = dot(lightDir, norm); if (highlight) { col = clamp(col + vec4(.3, .3, .3, 0), 0.0, 1.0); /* col = clamp(col + vec4(.2, .2, .2, 0), 0.0, 1.0); col = vec4(0.0, 1.0, 0.0, 0.0); col = vec4(.2, .8, .2, 1); */ } gl_FragColor = col * cosAng; } ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/seperableSymmetricKernel.fragsvgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/shader/seperableSymmetr0000644000175000017500000000377010616703330031773 0ustar moonmoon/* Implements a seperable symmetric kernel. The passed in kernel arrays are assumed to have odd sidelength and be reflected about their midpoint. Eg, if kernelSizeX == 3 and the passed in kernelX array is [.5 .2 .1], this is preumed to represent the expanded vector [.1 .2 .5 .2 .1] The final convolution matrix is equal to the product of the Y vector and the X vector. It will be of size m x n, where m is the length of the X vector and n is the length of the Y vector. */ uniform sampler2DRect source; const int maxKernelSize = 5; uniform float kernelX[maxKernelSize]; uniform float kernelY[maxKernelSize]; /* uniform int kernelSizeX; uniform int kernelSizeY; */ vec4 buf[maxKernelSize * 2 - 1]; int absInt(in int index) { if (index >= 0) { return index; } else { return -index; } } void main(void) { int i, j; for (i = 0; i < maxKernelSize * 2 - 1; i++) { buf[i] = vec4(0.0); for (j = 0; j < maxKernelSize * 2 - 1; j++) { vec4 samp = texture2DRect(source, gl_TexCoord[0].st + vec2(i - maxKernelSize + 1, j - maxKernelSize + 1)); buf[i] += samp * kernelY[absInt(j - maxKernelSize + 1)]; } } vec4 res = vec4(0.0); for (i = 0; i < maxKernelSize * 2 - 1; i++) { res += buf[i] * kernelX[absInt(i - maxKernelSize + 1)]; } /* i = 0; while (i < kernelSizeX) { i++; } for (i = 0; i < kernelSizeX; i++) { } */ /*Sum vertical*/ /* for (i = 0; i < kernelSizeX * 2 - 1; i++) { for (j = 0; j < kernelSizeY * 2 - 1; j++) { vec4 samp = texture2DRect(source, gl_TexCoord[0].st + vec2(i - kernelSizeX + 1, j - kernelSizeY + 1)); buf[i] += samp * kernelY[absInt(j - kernelSizeY + 1)]; } } */ /*Sum horizontal*/ /* vec4 res = vec4(0.0); for (i = 0; i < kernelSizeX * 2 - 1; i++) { res += buf[i] * kernelX[absInt(i - kernelSizeX + 1)]; } */ gl_FragColor = res; } svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/abc.png0000644000175000017500000002702010614350031026476 0ustar moonmoonPNG  IHDRdÆ pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F#-IDATx}{x%ے|QL 9'B nX(-6M%B9KvKӐ,6)S!PnU7ns4eYN>Ldi}{AYd! -TH-.]x@fo}bg [.`R(a^!߳wi<XB}) Ӂϩb,aI%A {E-EaC~>n0Qs(x;:,<,A!}ZaC~>nO8Efl$FGwta%MkXlk<< h IeZ ſ{a:hyEv0Q!rXo4B2>/fz- ;aMuN[<'7d:Yvp년M%y f vL jYX;Ml" QrY.8h9MͶ Kb(P! YxӉWnr6;h9GvONTY,m a83~ (\'Mahw~?`Œ a D"8 C!e0hfQѠREeNzBHO;wGt;Ѫb=z KT80x~7VR ; !?FGap$Hh'p]n& E5$+| b׋~|%Pun4p?׾xAfA,6[-kT~ 6LHc\q 3,$;:Wܻnr?U1AT^Zy-Q;].p)?ƝD7^G"|guZ®rqRT2 l2 X2!OT^q6)Y40xkdq1޺ v~GMM mۦth,,w==8`z*+SL'yH7zFR Q,{[,#yER~xϠȪ\<_Z*":/qD23D-VJPXO/0e}eˏ*jY"y @>0Ѳ%c&#H% 3DU ~'ɱ4(q!j1 H,c*I3Qf"&G@$=c3ZuYAKYH\R)!SmXM+#sIf)yd5i<y^i 6VRnFҞŪàV }>`$HVZ-Q=Y"R/Kw4+4"&ZI++wN@Z=^\Rdue< nKz:j)jZ]6jQ.[Ri <,,+ .g`lܻ7`;\.ٳoc%^S2k(ź^u644pW!CrXQѬ?^ T6| bmo/#n̲רTR;1z­g KQTVk*+v/Z;PTzdh=DXx?FA͏hVaߏG |N m۶I2ۉٰx<O$kg)?Aߏ2Tz| ѨQ{h>zTP 0 nǽDBT 5( ][GFT_a0\?ZZfbllB/|xQODK6WJrFg$eeLMYo;wJZqb4wr!lcc_:@ݗKQ|jZj=mȇhk>ۄǃH2 ROF6x 5\&S' G^޵?IrH`k綎$$> Zɬx)E9ŭLV6mRfJmSw]zt8Xp >/I1 SX|,{-dU$.nDRw(J 32֠bfڀ=0L:v$JqʬիWhoo-\ïJKQBb%|Yb0_/RISS*,~mu8l `"w0q,A99U(+kaO 4(+kANN&' 2,ab>۱m6AU׸bBw9A ntw5j~~7lZg0LH8deZᤛ61߼#󦿀**e7%?#Dc& RID6h\d4O|NU&ɬd 5Uعs(-nwHn5KPR,la&üNB~@n)AyyWcddܑQ*AddV$,NzS+|%ٸ~UMMM|+gk,N]rҟPp,B u"Q>cM jǧbhDɓq??ݵYuuuq_i׉$W{ 4uIvv9s؜VZmJ h&#DRd"6,Z(B)qA ) sAj.SZx77IoyI\rM+NF#WJ1Ѭ_eXQ9؏SΊ|݊XZ,gx퉑i_`<'+z^% 6i (GF\C"p9CŻ=(&tq1VN(q *s.3O)7^rS DI-QX߸F16f@=+Xb`_R"QڸqcHR#VB YApn"ْ>֥/\tzYNQxb+za9zTŝp 8p{Ţhȴ.@@ѣTsD3]݄>]JKQ*ݯzLΓ 2+Yg_4Mt1(`}4~}4#W} kVRQt''.)DA4zZbu`Ͳz{>AE_;޿cEENƉJ49(+(}h 2'׺,\,Δk] @`]ZGGސ'^R"}0>_ۋ/oG> ta_ޏ{|rB_IQ؞@ɍh+`Kp:4>JĐ_tsQ^_ q=VkFShtH/G0xT_2!> }Vƒ?7nKee sbmH! xM;= =aɓ씔\I<7Y쫨Cv}o#l[5'^/6 ҕ"W¯sX(kΜ!01) L$GsQB&v ;By g\'.f̙k02 v˒CRRD\XٔYMCC|1Ձu:#,4I)+BY$7xjMiJ;Vk4 cߥ:+n&Cr+~`4 `kQ2%&t* q.$~$ \8t6dàihHxZu~!^2o>$ ஁b[axjW FAFZ F#,.W Mp+n~/ ]?bP'5nTχ `8EFV\\@gt+J%R%B #l`󙆆v-0Sct`<'6ܚwShFc»srdP*Ί|` q3d ü gmHlҴa>(t:QWY9w4ߤUjd"a`PvKXO7O) W bY#):.(T2'GP.Gw(ᰀ f$A^).aVH6:IG极]@:lʬ~CUUUhmmI6)(q SAʷf!cBYryxbddƿ`j^:HR O{{;曘%6]]]*-NM&A9ϦM8kJC \Җt甞>v+0[BǒX~ Q?O8}{皼JR*sH L.J PWW'ضc.c\q`m۶6\r[;2ΕHNߔdS].<"LO<0bGɨ&:< \z6 yEʬ!2Ͳڕ 6m^¯JJ⮞a_w}}1 ߾nܷPLTU`0-ɱA?> O78I6Dy2K\2pƍrV| Uipp{Y{Չ\O<:,.NZraH YSL:Ӌթ:qGad&`G>"U(dY^Zj(JN'^bRQj)*rxF0 +4e#3LXKhdq񬬼bf P?i8&X](zATQ<2<,n<9>3Nb= aoWRT}l  xAӏ(9G-&G5J1Q)f/YZlXpsA48$O;RA3sMbI;΁łi>O9MnMyg Q6Bz=$" }>ls8p;:Ai%bɆKY,CawtRAӻRYC$L,Ny ĮVDhi2I`4W\.HD%M0Bbh0NIqW,6xaO`$zhFRPqs^xr3Rs Q8b(lz1%Y(y;:kcut|9C(='5hĵyyYRc׋|>CChO9Rv?Lyy6//N|YߏG-Ev9h}&,?9 L4"7"77k]h%> ׋ x ~=9C(EY:uU99XIQ͝aaKal6 -oxALs 2:7Xj5VRVR.(,ebh_B<#N%2\`=k\.QbKz,L,fk(p_ {a^AΕ>"AY.gK*'Kt:i4XZ99XYFq*18Q 0''a 1Չ&x$sj& Zj|oJ5c g|g#~:o|fJ1Q1{{d%̒,Kkzdb/ 2L99j {st,-<[1լ,LdNݬpl.ˤ&y N-D%A+p{2'"I^LB&R,A҇xm `r(t$,X5169:IENDB`svgsalamander-0~svn95.orig/java-one-2007/src/test/res/com/kitfox/javaone2007/abc_alpha.png0000644000175000017500000002612710617140334027660 0ustar moonmoonPNG  IHDR pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_F!tIDATx{T՝?](V35XC ̘0 {RW+sd@1QDohFZgjJqN9U[iO>ٿoDz,B!S*!!!!!B"B"B"B"B"BH@BH@BH@BH@B'iWɊRRyVl$0X*X8bƆ 0hlX>Ac, y؇͹𜚽!$N6<c>wR\/Jy]g5"=!7<;Umc;gwγ:?r:p94`Q*"OzcG#`MsB"<}+>8ؙy6Cc;,zfUpa @CcOλ+ٯ& 0F`97dzT4¼0|߿fUdNs&sǎ q$ra?]'x_2?$ "x|T,#r~xدi>IJ٬'BB_0\F4o.R1ρ=E1 hkVu !3~Ex, a;YE"# Vv⧍=5]Xxz |'"u>4k p")-g_4ǓT$B'* \L5U$BǁmQ$ R4Ӱ !n1`+ָDRNf=B<{[")b\=B4D6RX_ "tq"񖳁XBh4 LgpI@"όp4Y"1BXT"+ Z~|&,[zl l6`-T5BGmRDrd jl!lYH$ EZK@Jς@J" L2ejB-c#&K@% ؙjBxc[@aUBRxx'o4ޣ3kUjBsAd*nQjB2r֤Z3Z`>5<[!O5V:5XӀ% >a*kjBXAWcmp%)#'e O!Dhs9ur!gw~oT o jB38G_nPB ?/J@`֖B6n0b +ۯ*ԩ !BeX; =0 )qBD:i ?\T<`CQi|`z Θ -pڐ(n,zMjSR7>1qs2ugGL2]"WM4_L4=dЮd;;#YǠ8H6Bw-#7?F|Gw ]Dc&U,t1m+۶]{INA7'.C;chv ]X\#lNU{|vf3< ^3m+KNA$ V[[ڵǷFUxf[ho҄^@n uINN;n R)*_@E\bu*Ͼn2"NF`J.pģtT^ɞ x`!J^8Z;\7⑏Y_] mX)JD)BcSQΡu 7w~lOQh #$9kNYCU"Ѧy3> ȷ[@SX¡e䦭Ds #7=f8jPC#) &J6\Q`(R)neH nۢsch|  XF p{<] #iB,5ڕiUWWxcw,Tܔx]}QΚ&a|ipouRݗ|cu=O lxU+]R$&^LuN={撮I4P}}r_2{ȴMMR)kNzSƧ~I _pr^6g0{v)f,"9uW"BÕWN@NVy;V:h?&QLr'G9j 9/WN?0ylܸ'dR-j/RxX |+Xsϓ5n~qXvݞ%B㣦P@z/"9I`fo[Gƞi?5zr$z.rXvbx-稾kD5$Q 5AηjvlzӷXmmd3V.7z6.zOy'|T1>+ \>X{5{;)$5{;ߩ=ݺk+RІu[2ߨ\-]\Z ')۵\>* . ܛe5{;u\̹ |#ӵm7-}˖5i>,SDG3U'kvv朷'bͿpƪhˈ3ua ܿƕl')]Zy.UJ@+*h%!Rm0V,6j{P+oշlITkW >ʑjs]cu{ CƟh+x6N.e' cͷu$T\8YPN5TJ>8핀Թ|'.aCg`!1kWS^:[{' Tp WUHi䣊^Nq|P¿5o;8 _9 C 'M gN,G뻽1.3;j3_(|UtnۃQ5\>]q }wܢG|#핀Ըxg,qQ r.UjdƊS|^hV;-%|O|#핀TxelڢKʡ0z%9k#7meăpW)QEns\y9-|$i8e i D>X핀x7X9oE:|5 qDz-15w*\n~ҹ-c\հlB6:u.kWW+_iKxc&G+?QgܴeKJ69ܢ\XQGewf5Se_}Lm*>~񺱁:,un,+S:ņ4ڣCA auxSX$mMI :Im0VkkWs`4Liap㺂S|EdS0(G+ys+c ZK׍l+1a,;Qfѻt10y_ymjG#䣊^ [-cpq8lNͅJkMߝ:t͑u 18!Uj s]Xʹ0h-}rtj#kd|2kWCw|a9q\!괝+RD>8Ueܛ^v$H8^7ֵL~Ȇ[Y̻l~=Mop]WVH|Ifu@:aEd5?=)-tom|w`ji?~*Ъ7yI/qIz!Ql/9`ȥsM/ ^ A _Af`{!f')g.t5d|od-i~% h7o"6(,W{t4?&>cb-OαARBqD)e2mnG{ER?"Y\yi;|N;ڳMd:l*Zw-zΝiCIMһp}t| BzՆ#`2G'QY/A\kFVd5>Kx?R _ w:8YdP|˒ꮕZ ~d|rq/%赸=}S/g*Gk6۟l,'"YȘӔ)`!>=\p/|F J*0V$J9 :`Վ,&&N*h3+P@?j!aq)|5,dNX;=nc!`ʒvE 7!CMuY:0V2)ޝ\5e6{? < ? :-/NX@*-qd㺢[h`=d}U_TkypՐ$aDsއy2]/pmMrF<^Oue7[tW,axcNC/xHB4ucJҨHh|m7&w 5NWņ> aֹxp=ZG׿^GŎp*-a>:^7VBfǾFx?kk{۫W0V,T-_X<muf%"z`\d|c԰ܾ#S]5[L}rwS rD!K;%5̑M[ؓkvw-"9!q#7?Fż{0jwUW8j;c;SK>{`$[1as:k/Fr Su=xp+YOl:M}C;1~֛Mq џ|R%}v+jv vqʴ{|+\Ub*cNnpޮѷlIID %'W(`i2$ x>,q00V_K.e7:[)ó+^6MT#[\rn3>$AM:uALG[ 6r=̳n4 mo򁵫9pEJ. ZK~~@Zm@r㾶^RXsc z3?cr̜FZ/h #o6>=D}&0Xm4okFzVp`JsKIdӈ};G~_1U>"a _[ K+'Mbnl_H7#Ua|r]@PKg#) ! _[ j+u_ ǑzV-[䜙6SZ]=Yזf]?iOCWO5J-e { 0rcgc nJ],d}Cv0sGf win!1ŵ\nUgw)T1L`&BDs50RSws{ldiC6M}s\n,&k)xc-6d7NjT.r[]@*ԩM silvwks2=09d@ s+I"2/!((o x>κAL2 [NjK_4|hPB?b"یɐv?Vl%l?!D@Yx Y?WjB&O'CX ce9VRsVۂtW66*/k`d+'56 0(Y!D+ Z`wPo"mIUjB2GX&[ pڲ/ᆂ > 3ն:/~B.,7| 2iu!K1oXyAra6cMR! ۈCX!"9OmsZ&i`05 7,$[= \clEq>JHT#@dgzVN`#Vɰܔѽ"π&=;BD=&߱R& 4Br%!"F86&% a4֊?j| :zGZA?7,)=b\=sB4Tn\R>Nf=B<{; Ӂi(~f7ܧ^1jH(;oc8!In( 7g_4ǓT$B9")X ''Hp= l^TH@fr]jdXX3~"DF/"⸼u3πv$HE"0?3,Х"#SU}F""o8OT,sk3<b!#ؕgT,A\{{p֢ UD^0T,E!2 ref; final int glName; TexInputInfo(TexInput input, int glName) { this.ref = new WeakReference(input); this.glName = glName; } public int getGlName() { return glName; } public TexInput getTexInput() { return ref.get(); } } class ProgramInfo { final WeakReference ref; private final int glNameProg; ProgramInfo(Program program, int glNameProg) { this.ref = new WeakReference(program); this.glNameProg = glNameProg; } public int getGlNameProg() { return glNameProg; } public Program getProgram() { return ref.get(); } } GLPbuffer pbuffer; WeakHashMap texInputMap = new WeakHashMap(); //Keep a hard pointer to each TexInputInfo HashSet texInfoCache = new HashSet(); WeakHashMap programMap = new WeakHashMap(); //Keep a hard pointer to each TexInputInfo HashSet progInfoCache = new HashSet(); LinkedList progQueue = new LinkedList(); /** Creates a new instance of ShaderBuffer */ public ShaderBuffer(GLAutoDrawable drawable) { initGL(drawable); } private void initGL(GLAutoDrawable drawable) { GLCapabilities caps = new GLCapabilities(); // caps.setPbufferRenderToTexture(true); caps.setDoubleBuffered(false); if (!GLDrawableFactory.getFactory().canCreateGLPbuffer()) { throw new GLException("Pbuffers not supported with this graphics card"); } pbuffer = GLDrawableFactory.getFactory().createGLPbuffer(caps, null, // getWidth(), // getHeight(), 256, 256, drawable.getContext()); pbuffer.addGLEventListener(this); // canvas.display(); pbuffer.display(); } // public int addProgram(Program program) // { // int idx = programIdx++; // programs.put(idx, program); // return idx; // } public void queueProgram(ProgramInstance program) { synchronized (progQueue) { int maxWidth = Math.max(program.getWidth(), pbuffer.getWidth()); int maxHeight = Math.max(program.getHeight(), pbuffer.getHeight()); if (maxWidth > pbuffer.getWidth() || maxHeight > pbuffer.getHeight()) { pbuffer.setSize(maxWidth, maxHeight); } progQueue.addFirst(program); } //if (program } public void runPrograms() { pbuffer.display(); } // public Program removeProgram(int index) // { // return programs.remove(index); // } //-------------------------------- public void init(GLAutoDrawable gLAutoDrawable) { System.err.println("Pbuffer init"); GL gl = gLAutoDrawable.getGL(); gl.glClearColor(0, 0, 0, 0); gl.glMatrixMode(GL.GL_PROJECTION); GLU glu = new GLU(); glu.gluOrtho2D(0, 1, 0, 1); gl.glMatrixMode(GL.GL_MODELVIEW); } public void display(GLAutoDrawable gLAutoDrawable) { GL gl = gLAutoDrawable.getGL(); synchronized (progQueue) { while (!progQueue.isEmpty()) { ProgramInstance programInst = progQueue.removeLast(); for (Integer index: programInst.getInputIndicies()) { TexInput texInput = programInst.getInput(index); TexInputInfo info = texInputMap.get(texInput); if (info == null) { IntBuffer buf = BufferUtil.newIntBuffer(1); gl.glGenTextures(1, buf); int glName = buf.get(0); info = new TexInputInfo(texInput, glName); //Load texture data gl.glBindTexture(GL.GL_TEXTURE_2D, glName); // gl.glTexParameterIivEXT( gl.glTexImage2D(GL.GL_TEXTURE_1D, 0, GL.GL_RGBA, texInput.getWidthPow2(), texInput.getHeightPow2(), 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, texInput.getData()); texInputMap.put(texInput, info); texInfoCache.add(info); } } Program program = programInst.getProgram(); ProgramInfo progInfo = programMap.get(program); if (progInfo == null) { int vertId = gl.glCreateShader(GL.GL_VERTEX_SHADER); int fragId = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); int progId = gl.glCreateProgram(); String[] fragStrn = program.getFragmentStrings(); IntBuffer lenFragBuf = BufferUtil.newIntBuffer(fragStrn.length); for (String strn: fragStrn) { lenFragBuf.put(strn.length()); } gl.glShaderSource(fragId, fragStrn.length, fragStrn, lenFragBuf); gl.glCompileShader(vertId); String[] vertStrn = program.getVertexStrings(); IntBuffer lenVertBuf = BufferUtil.newIntBuffer(vertStrn.length); for (String strn: vertStrn) { lenVertBuf.put(strn.length()); } gl.glShaderSource(vertId, vertStrn.length, vertStrn, lenVertBuf); gl.glCompileShader(fragId); gl.glAttachObjectARB(progId, vertId); gl.glDeleteShader(vertId); gl.glAttachObjectARB(progId, fragId); gl.glDeleteShader(fragId); gl.glLinkProgram(progId); ProgramInfo programInfo = new ProgramInfo(program, progId); programMap.put(program, programInfo); progInfoCache.add(programInfo); } gl.glClear(GL.GL_COLOR_BUFFER_BIT); programInst.setupAttributes(gl, this); gl.glUseProgram(progInfo.getGlNameProg()); TexOutput out = programInst.getOutput(); gl.glRectf(0, 0, (float)out.getTargetWidth() / pbuffer.getWidth(), (float)out.getTargetHeight() / pbuffer.getHeight()); // gl.glBegin(GL.GL_QUADS); // { // gl.glVertex2f(0, 0); // gl.glVertex2f(1, 0); // gl.glVertex2f(1, 1); // gl.glVertex2f(0, 1); // } // gl.glEnd(); ByteBuffer bytes = BufferUtil.newByteBuffer(out.getTargetWidth() * out.getTargetHeight() * 4); //Finally, read the pbuffer back into pixel buffer gl.glReadPixels(0, 0, out.getTargetWidth(), out.getTargetHeight(), GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, bytes); } } //Allocate new textures //Deallocate removed textures } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/AbstractTexInput.java0000644000175000017500000000173310614346724031470 0ustar moonmoon/* * AbstractTexInput.java * * Created on April 24, 2007, 11:57 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.awt.Rectangle; import java.nio.ByteBuffer; import java.util.ArrayList; /** * * @author kitfox */ public class AbstractTexInput implements TexInput { ArrayList listeners = new ArrayList(); /** Creates a new instance of AbstractTexInput */ public AbstractTexInput() { } public Rectangle getImageRegion() { return null; } public int getWidthPow2() { return 0; } public int getHeightPow2() { return 0; } public ByteBuffer getData() { return null; } public void addTexInputListener(TexInputListener listener) { listeners.add(listener); } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/FilterDemoFrame.java0000644000175000017500000000351410614346724031230 0ustar moonmoon/* * FilterDemoFrame.java * * Created on April 23, 2007, 1:32 AM */ package com.kitfox.javaone2007; import java.awt.Color; /** * * @author kitfox */ public class FilterDemoFrame extends javax.swing.JFrame { /** Creates new form FilterDemoFrame */ public FilterDemoFrame() { initComponents(); FilteredButton but1 = new FilteredButton(); but1.setText("Button 1"); but1.setBounds(20, 40, 100, 40); but1.setBackground(new Color(204, 102, 255)); getContentPane().add(but1); setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { jButton1 = new javax.swing.JButton(); getContentPane().setLayout(null); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("jButton1"); getContentPane().add(jButton1); jButton1.setBounds(220, 210, 75, 23); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FilterDemoFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/0000755000175000017500000000000011562044310026627 5ustar moonmoon././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterTransform.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterTransform0000644000175000017500000000437210616703330031704 0ustar moonmoon/* * Resolution.java * * Created on May 4, 2007, 5:47 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; /** * Maps a viewArea to raster space * * @author kitfox */ public class FilterTransform { //Bounds to raster xform float scaleX = 1; float scaleY = 1; float transX; float transY; static final float EPSILON = .00001f; /** Creates a new instance of Resolution */ public FilterTransform() { } // public FilterTransform(Rectangle2D.Float viewArea, Rectangle rasterArea) // { // scaleX = rasterArea.width / viewArea.width; // scaleY = rasterArea.height / viewArea.height; // transX = -viewArea.x; // transY = -viewArea.y; // } public boolean equals(Object obj) { FilterTransform res = (FilterTransform)obj; return res.scaleX == scaleX && res.scaleY == scaleY && res.transX == transX && res.transY == transY; } void transform(Rectangle2D.Float rasArea) { float x1 = rasArea.x; float y1 = rasArea.y; float x2 = rasArea.x + rasArea.width; float y2 = rasArea.y + rasArea.height; x1 = x1 * scaleX + transX; y1 = y1 * scaleY + transY; x2 = x2 * scaleX + transX; y2 = y2 * scaleY + transY; rasArea.x = x1; rasArea.y = y1; rasArea.width = x2 - x1; rasArea.height = y2 - y1; } void calcMinRaster(Rectangle2D.Float viewArea, Rectangle rasterArea) { float x1 = (viewArea.x + transX) * scaleX; float y1 = (viewArea.y + transY) * scaleY; float x2 = x1 + viewArea.width * scaleX; float y2 = y1 + viewArea.height * scaleY; rasterArea.x = (int)x1; rasterArea.y = (int)y1; rasterArea.width = (int)x2 - (int)x1 + (isInteger(x2) ? 0 : 1); rasterArea.height = (int)y2 - (int)y1 + (isInteger(y2) ? 0 : 1); } private boolean isInteger(float value) { return Math.abs(value - (int)value) < EPSILON; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/PrimBuffer.java0000644000175000017500000000154010616703330031536 0ustar moonmoon/* * PrimBuffer.java * * Created on May 3, 2007, 11:04 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Dimension; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; /** * Defines an intermediate raster in a chain of filter primitive operations. * * @author kitfox */ public class PrimBuffer { Rectangle2D.Float bounds = new Rectangle2D.Float(); Point2D.Float offset = new Point2D.Float(); Dimension rasterBounds; int glTexName; // boolean solidBlack; //True if RGB chanels should be treated as if solid black // boolean solidAlpha; //True if alpha channel /** Creates a new instance of PrimBuffer */ public PrimBuffer() { } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterImageView.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterImageView0000644000175000017500000000251610616703330031604 0ustar moonmoon/* * FilterBuffer.java * * Created on May 4, 2007, 3:22 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.geom.Rectangle2D; /** * Represents a buffer that can hold intermediate image values calculated * in filter operations. * * @author kitfox */ public class FilterImageView { //Viewport area Rectangle2D.Float viewArea; //Map viewport coordinates to raster space FilterTransform viewToRaster; //Image data FilterImageRaster backingRaster; /** Creates a new instance of FilterBuffer */ public FilterImageView() { } public FilterImageView(Rectangle2D.Float viewArea, FilterTransform viewToRaster, FilterImageRaster backingRaster) { this.viewArea = viewArea; this.viewToRaster = viewToRaster; this.backingRaster = backingRaster; } boolean rasterConstainsView() { Rectangle2D.Float rasArea = (Rectangle2D.Float)viewArea.clone(); viewToRaster.transform(rasArea); return backingRaster.getRasterBounds().contains(rasArea); } boolean contains(Rectangle2D.Float viewArea) { return this.viewArea.contains(viewArea); } } ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimOffset.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimOffse0000644000175000017500000001041510616703330031616 0ustar moonmoon/* * FilterPrimTranslate.java * * Created on May 3, 2007, 2:50 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import com.kitfox.javaone2007.filter.opengl.TextureLibrary; import java.awt.geom.Rectangle2D; import java.util.HashMap; import javax.media.opengl.GL; /** * * @author kitfox */ public class FilterPrimOffset extends FilterPrimitive { int[] registers = new int[1]; private int regOut; private float dx; private float dy; /** Creates a new instance of FilterPrimTranslate */ public FilterPrimOffset() { } public int[] getRegInputs() { return registers.clone(); } public int getRegIn1() { return registers[0]; } public void setRegIn1(int value) { registers[0] = value; } public int getRegOut() { return regOut; } public void setRegOut(int regOut) { this.regOut = regOut; } public float getDx() { return dx; } public void setDx(float dx) { this.dx = dx; } public float getDy() { return dy; } public void setDy(float dy) { this.dy = dy; } void run(GL gl, HashMap allocBufs) { /* FilterImageView viewSource = allocBufs.get(registers[0]); FilterImageView viewDest = allocBufs.get(regOut); FilterTransform filtXform = viewDest.viewToRaster; //Find drawing regions in raster space Rectangle2D.Float rasterSrc = (Rectangle2D.Float)viewSource.viewArea.clone(); filtXform.transform(rasterSrc); Rectangle2D.Float rasterDest = (Rectangle2D.Float)viewDest.viewArea.clone(); filtXform.transform(rasterDest); int program = TextureLibrary.getInstance().getProgramName(); gl.glUseProgramObjectARB(program); int uniSource = gl.glGetUniformLocationARB(program, "source"); gl.glUniform1i(uniSource, 0); int uniDest = gl.glGetUniformLocationARB(program, "dest"); gl.glUniform1i(uniDest, 1); int uniSrcRegion = gl.glGetUniformLocationARB(program, "srcRegion"); gl.glUniform4f(uniSrcRegion, rasterSrc.x, rasterSrc.y, rasterSrc.width, rasterSrc.height); int uniDestRegion = gl.glGetUniformLocationARB(program, "destRegion"); gl.glUniform4f(uniDestRegion, rasterDest.x, rasterDest.y, rasterDest.width, rasterDest.height); int uniDx = gl.glGetUniformLocationARB(program, "dx"); gl.glUniform1f(uniDx, dx); int uniDy = gl.glGetUniformLocationARB(program, "dy"); gl.glUniform1f(uniDx, dy); int srcId = TextureLibrary.getInstance().getTextureName(viewSource.backingRaster); int destId = TextureLibrary.getInstance().getTextureName(viewDest.backingRaster); gl.glActiveTexture(GL.GL_TEXTURE0); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, srcId); // gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); // gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); gl.glActiveTexture(GL.GL_TEXTURE1); gl.glEnable(GL.GL_TEXTURE_RECTANGLE_ARB); gl.glBindTexture(GL.GL_TEXTURE_RECTANGLE_ARB, destId); // gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST); // gl.glTexParameteri(GL.GL_TEXTURE_RECTANGLE_ARB, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST); gl.glColor3f(1, 1, 1); gl.glBegin(GL.GL_QUADS); { gl.glTexCoord2f(0, 0); gl.glVertex2f(0, 0); gl.glTexCoord2f(raster.getWidth(), 0); gl.glVertex2f(1, 0); gl.glTexCoord2f(raster.getWidth(), raster.getHeight()); gl.glVertex2f(1, 1); gl.glTexCoord2f(0, raster.getHeight()); gl.glVertex2f(0, 1); } gl.glEnd(); gl.glUseProgram(0); // gl.glFlush(); */ } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/0000755000175000017500000000000011562044310030113 5ustar moonmoon././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/TextureLibrary.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/TextureL0000644000175000017500000000106310616703330031615 0ustar moonmoon/* * TextureLibrary.java * * Created on May 4, 2007, 9:06 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter.opengl; /** * * @author kitfox */ public class TextureLibrary { static final TextureLibrary singleton = new TextureLibrary(); /** Creates a new instance of TextureLibrary */ private TextureLibrary() { } public static TextureLibrary getInstance() { return singleton; } } ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/ProgramSource.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/ProgramS0000644000175000017500000000463710616703330031605 0ustar moonmoon/* * ProgramSource.java * * Created on May 3, 2007, 11:13 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter.opengl; import com.sun.opengl.util.BufferUtil; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.nio.IntBuffer; import java.util.ArrayList; import javax.media.opengl.GL; /** * * @author kitfox */ public class ProgramSource { public static enum Type { VERTEX { public int getGlType() { return GL.GL_VERTEX_SHADER; } }, FRAGMENT { public int getGlType() { return GL.GL_FRAGMENT_SHADER; } }; abstract public int getGlType(); }; private final Type type; private final URL source; /** Creates a new instance of ProgramSource */ public ProgramSource(Type type, URL source) { this.type = type; this.source = source; } int load(GL gl) throws IOException { int shaderName = gl.glCreateShader(type.getGlType()); String[] lines = loadShader(source.openStream()); IntBuffer sizes = stringSizes(lines); gl.glShaderSource(shaderName, lines.length, lines, sizes); gl.glCompileShader(shaderName); return shaderName; } private String[] loadShader(InputStream is) throws IOException { InputStreamReader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(reader); ArrayList lines = new ArrayList(); for (String line = br.readLine(); line != null; line = br.readLine()) { lines.add(line); } return lines.toArray(new String[lines.size()]); } private IntBuffer stringSizes(String[] lines) { IntBuffer buf = BufferUtil.newIntBuffer(lines.length); for (String line: lines) { buf.put(line.length()); } buf.rewind(); return buf; } public Type getType() { return type; } public URL getSource() { return source; } } ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/ProgramLibrary.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/opengl/ProgramL0000644000175000017500000000106310616703330031564 0ustar moonmoon/* * TextureLibrary.java * * Created on May 4, 2007, 9:06 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter.opengl; /** * * @author kitfox */ public class ProgramLibrary { static final ProgramLibrary singleton = new ProgramLibrary(); /** Creates a new instance of TextureLibrary */ private ProgramLibrary() { } public static ProgramLibrary getInstance() { return singleton; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/Filter.java0000644000175000017500000000747710616703330030741 0ustar moonmoon/* * Filter.java * * Created on May 3, 2007, 12:39 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Rectangle; import java.awt.geom.Rectangle2D; import java.util.HashMap; import javax.media.opengl.GL; /** * * @author kitfox */ public class Filter { final FilterImageView viewOutput; //Program made up of a chain of filter primitives // ArrayList primitives = new ArrayList(); final FilterPrimitive[] primitives; final HashMap allocBufs; /** Creates a new instance of Filter */ public Filter(FilterPrimitive[] primitives, HashMap inputs, FilterImageView output) { this.primitives = primitives.clone(); this.viewOutput = output; FilterTransform coordSys = output.viewToRaster; if (!output.rasterConstainsView()) { throw new IllegalArgumentException("View extends beyond raster"); } //Make sure backing rasters of all input images fit output resolution for (Integer i: inputs.keySet()) { if (i == 0) { throw new IllegalArgumentException("Register 0 is reserved for filter output"); } FilterImageView img = inputs.get(i); if (!img.viewToRaster.equals(coordSys)) { throw new IllegalArgumentException("Input image " + i + " has a different coordinate system than output filter"); } if (!img.rasterConstainsView()) { throw new IllegalArgumentException("View of image " + i + " extends beyond raster"); } } //Allocate temporary intermediate buffers allocBufs = new HashMap(); allocBufs.putAll(inputs); allocBufs.put(0, output); for (FilterPrimitive prim: primitives) { int[] inputArr = prim.getRegInputs(); for (int i: inputArr) { if (!allocBufs.containsKey(i)) { throw new IllegalArgumentException("Could not find input for register " + i); } } //Determine output size FilterImageView[] inputImages = new FilterImageView[inputArr.length]; for (int i = 0; i < inputImages.length; i++) { inputImages[i] = allocBufs.get(i); } Rectangle2D.Float viewArea = prim.getOutputViewArea(output.viewArea, inputImages); //Register output of primitive int outReg = prim.getRegOut(); FilterImageView in = allocBufs.get(outReg); if (in != null) { //Check bounds if (!in.contains(viewArea)) { throw new IllegalArgumentException(); } //Currently assigned image is adequate } else { //Create new buffer Rectangle rasterArea = new Rectangle(); coordSys.calcMinRaster(viewArea, rasterArea); IntermediateRaster imgRas = new IntermediateRaster(rasterArea); FilterImageView imgView = new FilterImageView(viewArea, coordSys, imgRas); allocBufs.put(outReg, imgView); } } } public void render(GL gl) { for (FilterPrimitive prim: primitives) { prim.run(gl, allocBufs); } } } ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/BufferedImageRaster.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/BufferedImageRa0000644000175000017500000000144010616703330031524 0ustar moonmoon/* * IntermediateRaster.java * * Created on May 4, 2007, 8:36 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Rectangle; import java.awt.image.WritableRaster; /** * * @author kitfox */ public class BufferedImageRaster extends FilterImageRaster { final WritableRaster backing; // Rectangle bounds; /** Creates a new instance of IntermediateRaster */ public BufferedImageRaster(WritableRaster backing) { this.backing = backing; // this.bounds = bounds; } public Rectangle getRasterBounds() { return new Rectangle(0, 0, backing.getWidth(), backing.getHeight()); } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterImageRaster.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterImageRast0000644000175000017500000000107210616703330031577 0ustar moonmoon/* * FilterImageRaster.java * * Created on May 4, 2007, 5:32 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Rectangle; /** * An array of pixels that hold image data for filtering operations. * * @author kitfox */ abstract public class FilterImageRaster { /** Creates a new instance of FilterImageRaster */ public FilterImageRaster() { } abstract public Rectangle getRasterBounds(); } ././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/IntermediateRaster.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/IntermediateRas0000644000175000017500000000115510616703330031637 0ustar moonmoon/* * IntermediateRaster.java * * Created on May 4, 2007, 8:36 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.Rectangle; /** * * @author kitfox */ public class IntermediateRaster extends FilterImageRaster { Rectangle bounds; /** Creates a new instance of IntermediateRaster */ public IntermediateRaster(Rectangle bounds) { this.bounds = bounds; } public Rectangle getRasterBounds() { return bounds; } } ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimGaussianBlur.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimGauss0000644000175000017500000000240510616703330031636 0ustar moonmoon/* * FilterPrimTranslate.java * * Created on May 3, 2007, 2:50 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.util.HashMap; import javax.media.opengl.GL; /** * * @author kitfox */ public class FilterPrimGaussianBlur extends FilterPrimitive { int[] registers = new int[1]; private int regOut; private float stdDeviation; /** Creates a new instance of FilterPrimTranslate */ public FilterPrimGaussianBlur() { } public int[] getRegInputs() { return registers.clone(); } public int getRegIn1() { return registers[0]; } public void setRegIn1(int value) { registers[0] = value; } public int getRegOut() { return regOut; } public void setRegOut(int regOut) { this.regOut = regOut; } public float getStdDeviation() { return stdDeviation; } public void setStdDeviation(float stdDeviation) { this.stdDeviation = stdDeviation; } void run(GL gl, HashMap allocBufs) { } } ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimitive.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/filter/FilterPrimitive0000644000175000017500000000432210616703330031674 0ustar moonmoon/* * FilterPrimitive.java * * Created on May 3, 2007, 2:38 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.filter; import java.awt.geom.Rectangle2D; import java.util.HashMap; import javax.media.opengl.GL; /** * The concept of registers is borrowed from assembler code design to represent * intermediate states in image processing. Each register can contain a * PrimBuffer containing intermediate image data. An input register provides * raster data for the calculation and an output register coresponds to the * filter destination. * * Register 0 coresponds to the final output image. * * @author kitfox */ abstract public class FilterPrimitive { private Rectangle2D.Float preferredOutputViewArea; /** Creates a new instance of FilterPrimitive */ public FilterPrimitive() { } abstract public int[] getRegInputs(); abstract public int getRegOut(); public Rectangle2D.Float getOutputViewArea(Rectangle2D.Float clip, FilterImageView... inputs) { if (preferredOutputViewArea != null) { Rectangle2D.Float area = new Rectangle2D.Float(); Rectangle2D.Float.intersect(preferredOutputViewArea, clip, area); return area; } Rectangle2D.Float area = new Rectangle2D.Float(); for (FilterImageView view: inputs) { if (area == null) { area = (Rectangle2D.Float)view.viewArea.clone(); } else { Rectangle2D.Float.union(view.viewArea, area, area); } } if (area == null) return null; Rectangle2D.Float.intersect(area, clip, area); return area; } public Rectangle2D.Float getPreferredOutputViewArea() { return preferredOutputViewArea; } public void setPreferredOutputViewArea(Rectangle2D.Float preferredOutputViewArea) { this.preferredOutputViewArea = preferredOutputViewArea; } abstract void run(GL gl, HashMap allocBufs); } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/Program.java0000644000175000017500000000065610614346724027636 0ustar moonmoon/* * Program.java * * Created on April 24, 2007, 8:57 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; /** * * @author kitfox */ abstract public class Program { public Program() { } abstract public String[] getFragmentStrings(); abstract public String[] getVertexStrings(); } ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputResizedEvent.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputResizedEvent.j0000644000175000017500000000111710614346724031640 0ustar moonmoon/* * TexInputDataChangedEvent.java * * Created on April 24, 2007, 11:50 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.awt.Rectangle; /** * * @author kitfox */ public class TexInputResizedEvent extends TexInputEvent { Rectangle region; /** Creates a new instance of TexInputDataChangedEvent */ public TexInputResizedEvent(TexInput source, Rectangle region) { super(source); this.region = region; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/programs/0000755000175000017500000000000011562044310027174 5ustar moonmoon././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/programs/RedGreenFill.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/programs/RedGreenFill.0000644000175000017500000000114510614346724031513 0ustar moonmoon/* * RedGreenFill.java * * Created on April 25, 2007, 12:29 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007.programs; import com.kitfox.javaone2007.Program; /** * * @author kitfox */ public class RedGreenFill extends Program { /** Creates a new instance of RedGreenFill */ public RedGreenFill() { } public String[] getFragmentStrings() { return null; } public String[] getVertexStrings() { return null; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/FilteredButton.form0000644000175000017500000000301510614346724031173 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInput.java0000644000175000017500000000130410614346724027776 0ustar moonmoon/* * TexInput.java * * Created on April 24, 2007, 11:55 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.awt.Rectangle; import java.nio.ByteBuffer; /** * Implementing classes provide data for images. * @author kitfox */ public interface TexInput { public Rectangle getImageRegion(); public int getWidthPow2(); public int getHeightPow2(); /** * Byte buffer of RGBA data that fills widthPow2 x heightPow2 rectangle */ public ByteBuffer getData(); public void addTexInputListener(TexInputListener listener); } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexOutput.java0000644000175000017500000000133310614346724030201 0ustar moonmoon/* * TexOutput.java * * Created on April 25, 2007, 12:06 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; /** * * @author kitfox */ public class TexOutput extends AbstractTexInput { /** Creates a new instance of TexOutput */ public TexOutput() { } /** * @return width of image in pixels that program output will be written to. */ public int getTargetWidth() { return 0; } /** * @return height of image in pixels that program output will be written to. */ public int getTargetHeight() { return 0; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputEvent.java0000644000175000017500000000110010614346724030772 0ustar moonmoon/* * TexInputEvent.java * * Created on April 24, 2007, 11:31 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.util.EventObject; /** * * @author kitfox */ public class TexInputEvent extends EventObject { /** Creates a new instance of TexInputEvent */ public TexInputEvent(TexInput source) { super(source); } public TexInput getSource() { return (TexInput)super.getSource(); } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/FrameBufferTest.java0000644000175000017500000000760710614346724031256 0ustar moonmoon/* * FrameBufferTest.java * * Created on April 25, 2007, 4:22 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import com.sun.opengl.util.BufferUtil; import java.nio.IntBuffer; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLDrawableFactory; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLPbuffer; /** * * @author kitfox */ public class FrameBufferTest implements GLEventListener { GLPbuffer pbuffer; /** Creates a new instance of FrameBufferTest */ public FrameBufferTest(GLAutoDrawable drawable) { GLCapabilities caps = new GLCapabilities(); caps.setDoubleBuffered(false); if (!GLDrawableFactory.getFactory().canCreateGLPbuffer()) { throw new GLException("Pbuffers not supported with this graphics card"); } pbuffer = GLDrawableFactory.getFactory().createGLPbuffer(caps, null, // getWidth(), // getHeight(), 256, 256, drawable.getContext()); pbuffer.addGLEventListener(this); pbuffer.display(); } public void init(GLAutoDrawable drawable) { GL gl = drawable.getGL(); IntBuffer ibuf = BufferUtil.newIntBuffer(1); gl.glGenFramebuffersEXT(1, ibuf); int frameBufId = ibuf.get(0); //------------------------------- //if framebuffer == 0, control reverts to main window gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, frameBufId); int texId = 0; gl.glFramebufferTexture2DEXT(GL.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_RECTANGLE_ARB, texId, 0); //Mipmap level switch (gl.glCheckFramebufferStatusEXT(frameBufId)) { case GL.GL_FRAMEBUFFER_COMPLETE_EXT: //Ok break; case GL.GL_FRAMEBUFFER_UNSUPPORTED_EXT: //Framebuffers not supported break; default: //Handle error code break; /* case GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: //Framebuffers not supported break; case GL.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: //Framebuffers not supported break; */ } //------------------------------- ibuf.put(0, frameBufId); gl.glDeleteFramebuffersEXT(1, ibuf); } public void display(GLAutoDrawable drawable) { } public void reshape(GLAutoDrawable drawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable drawable, boolean b, boolean b0) { } } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootsvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputDataChangedEvent.javasvgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputDataChangedEve0000644000175000017500000000112710614346724031565 0ustar moonmoon/* * TexInputDataChangedEvent.java * * Created on April 24, 2007, 11:50 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.awt.Rectangle; /** * * @author kitfox */ public class TexInputDataChangedEvent extends TexInputEvent { Rectangle region; /** Creates a new instance of TexInputDataChangedEvent */ public TexInputDataChangedEvent(TexInput source, Rectangle region) { super(source); this.region = region; } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/TexInputListener.java0000644000175000017500000000065010614346724031507 0ustar moonmoon/* * InputListener.java * * Created on April 24, 2007, 11:30 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.util.EventListener; /** * * @author kitfox */ public interface TexInputListener extends EventListener { public void textureResized(); public void textureDataChanged(); } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/FilterDemoFrame.form0000644000175000017500000000301610614346724031247 0ustar moonmoon
svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/FilteredButton.java0000644000175000017500000001537710614346724031167 0ustar moonmoon/* * FilteredPanel.java * * Created on April 23, 2007, 8:39 AM */ package com.kitfox.javaone2007; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.font.LineMetrics; import java.awt.geom.RectangularShape; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.swing.JComponent; /** * * @author kitfox */ public class FilteredButton extends JComponent implements GLEventListener { private GLCanvas canvas; ShaderBuffer shader; BufferedImage backBuf; private String text; private float radius; // static enum BnState {UP, DOWN, OVER}; // BnState bnState = BnState.UP; boolean mouseOver; boolean bnPressed; /** Creates new form FilteredPanel */ public FilteredButton() { initComponents(); canvas = new GLCanvas(new GLCapabilities()); canvas.addGLEventListener(this); add(canvas); // add(canvas, BorderLayout.CENTER); // canvas.createOffscreenDrawable(); // JButton but; // but.paint(null); // but.paintComponent(null); //but.paint } public void addNotify() { super.addNotify(); canvas.display(); } // protected void paintBorder(Graphics g) // { // } protected void paintComponent(Graphics gg) { Graphics2D g = (Graphics2D)gg; Color bgColor = getBackground(); if (mouseOver) { bgColor = Color.GREEN; } if (bnPressed) { bgColor = Color.BLUE; } g.setColor(bgColor); RectangularShape rect; if (radius == 0) { rect = new Rectangle(0, 0, getWidth(), getHeight()); } else { float maxRad = Math.min(getWidth() / 2f, getHeight() / 2f); float calcRad = Math.min(radius, maxRad); rect = new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(), calcRad, calcRad); } g.fillRect(0, 0, getWidth(), getHeight()); if (text != null) { Font font = getFont(); g.setFont(font); FontMetrics fm = g.getFontMetrics(); int baseline = getHeight() / 2 + (fm.getAscent() - (fm.getAscent() + fm.getDescent()) / 2); LineMetrics lm = font.getLineMetrics(text, g.getFontRenderContext()); int xpos = (getWidth() - fm.stringWidth(text)) / 2; g.setColor(getForeground()); g.drawString(text, xpos, baseline); } // super.paintComponent(g); /* if (backBuf == null) { backBuf = getGraphicsConfiguration().createCompatibleImage(getWidth(), getHeight()); } Graphics2D gg = backBuf.createGraphics(); super.paintComponent(gg); gg.dispose(); g.drawImage(backBuf, 0, 0, null); */ } public String getText() { return text; } public void setText(String text) { this.text = text; } public float getRadius() { return radius; } public void setRadius(float radius) { this.radius = radius; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { setLayout(null); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseEntered(java.awt.event.MouseEvent evt) { formMouseEntered(evt); } public void mouseExited(java.awt.event.MouseEvent evt) { formMouseExited(evt); } public void mousePressed(java.awt.event.MouseEvent evt) { formMousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { formMouseReleased(evt); } }); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { formComponentResized(evt); } }); }// //GEN-END:initComponents private void formMouseReleased(java.awt.event.MouseEvent evt)//GEN-FIRST:event_formMouseReleased {//GEN-HEADEREND:event_formMouseReleased bnPressed = false; repaint(); }//GEN-LAST:event_formMouseReleased private void formMousePressed(java.awt.event.MouseEvent evt)//GEN-FIRST:event_formMousePressed {//GEN-HEADEREND:event_formMousePressed // canvas.display(); bnPressed = true; repaint(); }//GEN-LAST:event_formMousePressed private void formMouseExited(java.awt.event.MouseEvent evt)//GEN-FIRST:event_formMouseExited {//GEN-HEADEREND:event_formMouseExited mouseOver = false; repaint(); }//GEN-LAST:event_formMouseExited private void formMouseEntered(java.awt.event.MouseEvent evt)//GEN-FIRST:event_formMouseEntered {//GEN-HEADEREND:event_formMouseEntered mouseOver = true; repaint(); }//GEN-LAST:event_formMouseEntered private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized {//GEN-HEADEREND:event_formComponentResized backBuf = null; }//GEN-LAST:event_formComponentResized // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables public void init(GLAutoDrawable drawable) { System.err.println("Button init called"); shader = new ShaderBuffer(drawable); canvas.display(); } public void display(GLAutoDrawable gLAutoDrawable) { } public void reshape(GLAutoDrawable gLAutoDrawable, int i, int i0, int i1, int i2) { } public void displayChanged(GLAutoDrawable gLAutoDrawable, boolean b, boolean b0) { } } svgsalamander-0~svn95.orig/java-one-2007/src/main/java/com/kitfox/javaone2007/ProgramInstance.java0000644000175000017500000000305310614346724031315 0ustar moonmoon/* * ProgramInstnace.java * * Created on April 24, 2007, 9:06 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package com.kitfox.javaone2007; import java.util.Collections; import java.util.HashMap; import java.util.Set; import javax.media.opengl.GL; /** * * @author kitfox */ public class ProgramInstance { HashMap inputs = new HashMap(); private TexOutput output = new TexOutput(); private int width; private int height; private Program program; /** Creates a new instance of ProgramInstnace */ public ProgramInstance() { } public void addInput(int index, TexInput input) { inputs.put(index, input); } public TexInput getInput(int index) { return inputs.get(index); } public Set getInputIndicies() { return Collections.unmodifiableSet(inputs.keySet()); } public int getWidth() { return width; } public int getHeight() { return height; } public Program getProgram() { return program; } public void setProgram(Program program) { this.program = program; } public TexOutput getOutput() { return output; } void setupAttributes(GL gl, ShaderBuffer shaderBuffer) { throw new UnsupportedOperationException("Not yet implemented"); } } svgsalamander-0~svn95.orig/java-one-2007/src/main/res/0000755000175000017500000000000011562044310021174 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/0000755000175000017500000000000011562044310021752 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/kitfox/0000755000175000017500000000000011562044310023256 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/kitfox/javaone2007/0000755000175000017500000000000011562044310025212 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/kitfox/javaone2007/program/0000755000175000017500000000000011562044310026661 5ustar moonmoonsvgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/kitfox/javaone2007/program/redGreen.frag0000644000175000017500000000006010614350031031246 0ustar moonmoonvarying vec2 coordPos; void main(void) { }svgsalamander-0~svn95.orig/java-one-2007/src/main/res/com/kitfox/javaone2007/program/redGreen.vert0000644000175000017500000000022710614350031031314 0ustar moonmoon/* uniform vec2 origin; uniform vec2 size; */ varying vec2 coordPos; void main(void) { coordPos = gl_Vertex.xy; gl_Position = fTransform(); }svgsalamander-0~svn95.orig/java-one-2007/fboImage.png0000755000175000017500000014500510614346724021132 0ustar moonmoonPNG  IHDR5IDATx]Uo'ӓL $zM)"HG@A$ " (AޤND 4!grf2s3If&S,ɽ{v{{H!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B 902!B~B$BQ$,j#!Bq!B!P!b B!FȐP!BBC]B1҅ĆD!Bm"B.6$8B!CCm!BB!Hj!BBN6p֟m%BoP B!!B!j!BH|B!$>@!jB!$>j!BH| B!$>B!j!BB!ć@!j!BH|H| B!!B!j!BH|B!$>@!Bm B@!jB!$>B!j!BB!ć@!j!BH|H| B!!6B!ćP!BC B!!B!j!BH| B!P B!6B!P!BH| B!$>B!j!BH|H| B!!6B!ćP!BC B!!B!j!BH|B!$>j!BH| B!P!BH| B!$>B!j!BB!$>$>B!P!BC B!!B!j!BH|B!$>j!BH| B!P B!6B!P!BH| B!$>B!F%d2N\[AAA(Q\\,))YJKKdUUU?kqMgr/'̽ BR)U,UTTdsuuuEݭz„ 'NlZ\k ĽE=sBCm B,d2mb(XY:5d&`d̶rq-ɵ{L{ޢrj!ZÙ˘ JͪƘk6`D)fkmlk/c0cN5;pz}=mϵ½O eBn{yxd³ć@!İ p̚V3lG к2f7`7nv=fO=k6p͇{{=ϫ½OݢwgMUxV@B*V]{ffeff-f+kM[vىf]n`}22ݢyy'gl Ϫ%<, ]hJ| B,?R "(Ы6f':Bt|dvمfw=b٫f}6gE l rl:HB^2-k3+0+2+I B>\dv%7K<=Tfvoݳe|vogzIxge mS*.ja*P!S4$&5e2٪rU *,2)[扎-̎1i'lmrNּ~Tե3ז:'JNa۸mQ\/Ƶ&3{{I / _Mhڈh;ڐMs94YCm Ih&EdmI*5<ڨ*D&l~]N%ձuًfm>J9>B!KRt:Ӝg%rT$퉎sf9# gV /?}1j!KOX4*L lR.oy*`8DG*BD}+@~kt8ʄf{CM0}ׄI55'&s&dv5f767[ZZfvر>Ǎ[6{=m|[[y=㞯 ߁wEߓw,x&< a;ʥ$>B! Tդөt:mKw$n5l 5^:xJpϦmٚAXQ2}??7tYcބ&0!=kk +0;ݢw x< ψg3 [3mg yDG>Wsy&B&f~+@JKk&`UVL֝a机:z;ٓSjow F;ݢw? τg3YxvAߠW3}IC bPJeRDU&M&K&.H&/??* [,l]՚X9s[ A?3w ǎu/5afl`xl$W{Ğ{EϏg3yB_wC%6B!8_J2l|u fԢ!ёH/ϕfO%:_BmĢ;6M(,t|W#"UUZzwyc&Rjh+x/!Ϙg3!,!mD[fmH[Ҧm:0ȕwv/ѧ[1ZEGZĠ%BA&t'%UT[C:Qk&sЊyթ%= E"&h .&&R8b/:b^!` εdn Ւx<<[1Ϛgγ h /AVmGҖ)m(df3[K)}Fe|ćBFXf m-OcL&ך͖RcV5x@z× B,ۆkd~d[#LCߡїz>xK蓇GY.},!(I KIJw`>!y0p&:K%uee>e9z[;B}>ۇ:7: eh{}>AߠW3})kxA蓯GY.},!( S&reS ƴeSHtlݗe7ʭqHOofW}e rQcsgГ"  }C/ѧ[P.?w/ӧqzFK|H !HѬ։l<>u#1=-irѹyq;'Pb!OGAJ"[\}>PRB_Oѷc5}/{wo/ӧq:}^CP!F Qfkq6>NۢHmIf$:",?WlVR [PR⎨Y_y>Y?Oѷc5}>H_O7x?}>>>Og 0TZCP!3!_\Mfw:2'=K:ɶnn 1b/E& ﶷ2c/0}E{A"}IM4my>c(̷-,!(ÙT*M&K2ʹddz':Rj|%3)9V}~7la첅7ʖo㹱z= }>Iߤfz4}c1ؐBy2rjmi}مf/}}, +(p[ܑUUnzC^jWJ_wå=0} cR] J|H !p.VRcm1Rc&sZ#aWo7/,tVT3ƌqׅ-'Z[F;_BD7;xM(}>KߥF3& cFCP! dφ.e'dE+r;;˄*of*~;0[@ϫ޲Ev}!nQ*}K/ӧBHQ2҃ Ȏc)lXCP!َm1t-`((ع==DGZynɛKڑɸw-745ƍs/3WɆWJ҇i6}^gal0F.a0vCyg;PCP! t#Ki'8+;03w|N/)3L,-2RY.jhpϴ.lDOӷkm6zßz[tsB\)N&]!5[9Lnc}%:|Yͺ .0[O%CdFX}MBQ[1td߿c1$>$bRQڪ2ھ":;0cNw[ܦ>b 7u.lD~'c"Oz55n,cV[% @!HdM:^!-͎4Q/g [-pZ}W].sRTYP&c1Xu۔1c ŽB1T[|ݪ)Ncc%ȃmR.QOF;VyO۽Qfmac1`0V3]`2al1Ʀ3{AƢćB t:ݐT_gv^#+K\-dJKi֖jz(5`0V3P"/c1$5]I !DT*ݔTVPZs&թfDgܺ]^N KC_kktO&[xF1`0V3c)h0Ne,2&~JӕBd`L"ZA2y(gyRZPw=근(L7Pg1a 1zHY{2Y fJ !2> 7g2E4եlN3lv Y+AnRjzw?i]O&["c0vC%c1XKuØVw0V]A @!XblIRtzl0[P.JtxyD,Ke*(.vTU cuo.c\* @!葂HLyb.3)^4{=q/4h"wHE;hmuڂ5W L/XbL1c5c1{sOXf,3 B޼e)[)vf'bp/RPC L6bc1c 23 "1BUդәL/=3QG$b-6آCc%%eQŒ9ޱc٭a ɘfl3%%LǹTjTGDa)^!c|&l yuua[^iksE&t19cȘdlf ,ӌmƸ"% Lvr.We]x&bl1B鵵Ζ-B ӭTս:~{ބԓޫvرnnv45?56+{onF͈}ͮ9?{A"cSXevȘ>1z/obHiHML'XPPRkݏ9U WC0C]Eݷp_,-u{=LlZY鎨U;ΰ^PW )^kUa,2& dьuvlQٽePeA{{¼hfO.֞1{!xo8d?gy6pB-~b͈}Ҍp7{"^Hz5L0;ޝhi ]Lmfn=m٬+YL]r ݖ]h<ɯ7۵aHo9d2V]pkaد)bb`C%i*Mv{ )ۧܝ>f=g !nkiOuGbxxeb OsV" \-Y J꼝em3}mߗלa}ή7F!,.=/BkS￟m|$W^M5)^lܸL5MZ;5kϴKy5qe2far?c|>ssfD @!(L2]*Gf&b5}¶t[6!0gxp 1C ulA&Yn-3L}kcvz7c|?oJY Ȧ&fƛ(}>خ=&B-Q&{zbVa3=@671x➓kSmk5`<ߗ}4|ۙ(c(Ǚwl4cK.Z+vQ-E1 }a5\>[<<41=ÏLk! L,Vq}&֩,6a}^u[}f,3inڌ #,(A&-~cۚ]kf -p PQow 7.'?rv^D/ϔYh?<%el3lG$#&I "?bRd6G 9tާ!_pF:ʼ*~}~wvG}s^%C&onk+Kqc{F'Zk-{q7uQCu{キnfFu]M<5X辕 L|jj@3Ȟ@O\+`t,!ª[[ng}?o[wW[n=^oܹ?v}Y{믿{9;]{?я/5X÷GRiA8ffl3뇄U0GaciJs&ST` @!İm6C^M&28t WCy0W7V*u]{8Ϝ9s3BQ˶#^a=E/Bmn=px;b=P;c #xOG!^,ι!=̰N`@ v{;=}_{ꩧܻ̙ϟ݇~>#/*O?uky_nﷇ.>& *Ny Lt=Cyi+XP1g{άlDl뗪$y(w8w4sVNwly~qmt85ήyrH3rxR,LIv\ώ`D3<_m/{ق܋Øg쓠!$Ǝ & gYN(N&3B! Y_v5ټh.5gβE? ɒTyhj簖c?ciʃKDTKWrD Q~;/9#,Am[\δ~pv?vϚP&2ULcx^~~{Apz쒡b0-K}"3D n sȮd"JgFB aRAmgvNDl)!i![!zs @WDgTqISmO9! pv:Ѯl~_9wmgHb6 UTcC~Dj ژj%$J"V`^<[ ."36Iؼ@99"QCΡd\M:]ecb B a(NՉ2O&b3bCPìaȡzc,PՄǾ㎥Z9ZBF@!^J^{mxp:7 ÿܐl7!Tbz(iW*ߖ//cE >Es*000'070Gt aiy )7Rb¼jvӉC)*awEc{0@Ґl18 -ǒHSt-d $rr ˇg !ɤ!J61|?1@oe߳6_070G%M՗TaM>KOb_+6'|:$CB7( `.|v| KJ\uLGx㍽#IpH` " d|O,bD"KFl)jSrqO-wws9ݮ]?~lrVs sXS7\Yyo񆏴&*ND1l֬Y}uγ|H)A8c$^ܞZJmY[cVI }wBAov}f&BQ}Ll=2r2Fޥ*iR9KHjmXTA|-#o Vv7IKn.QdRT94`?;֞Q$[&Ryis2}<{cQIOE$2Q.FD!'Qg_P..([$%sGcנstu:=l:` @!r%DGUm>cTi`0%,+  o?m7n=&ɖYge9^U縬0ƳGkw#[K{= 4~_c9Ɨc{$xۗe}͗$ms+%E'ܔ뭷OT`J<sssHQM\]a2YLQ'%C@Qw]}ϭC0Q[Y3_&SmϞ}fD tO q\qNP#AD2tI;2_1}_.li" [ZT.rRhK8F:GN΄H&4$~@n@^<Ab-|*!-T+.bnM7u64Z8G )1y RpG4 i!2800לftݚt8}n|"OP1f}./8f߱ / S.^cVT / /xXO";Ƃ [W3qZV{7oGf,cOF2gҸpZҧKpIh9?|[\ńbT-hֶXMd<-ʬu$[!x^o[m:UMM.  G  y }Drtx!v{: .^FZD޾>1g0w000dyDie ӛГB [ݞR! y~2f9{?pRǴ6 ]w{z*{GG%cD&BHpEP/īE{Dp@E9'\׈r}iZN{}}[ߥLXmdV[m!zv!Y=D./| nS?>` |ZSO=5^G7n5>kQ搟܋3aaيET2e:PPfg/(e*F5Yg|=Y(۰,"+/lc$X#7^m޶9L8ρ}A?DW. L g)5CԒc}ӮMtM&s!o뉰˽!doF#.OWTDw3esDH*(Uu_lS)/_EhoW !_>Iʞs[oB/[w}=c\$i d/ +ͨgL`xxMHb*qQl  bNanyDa:~(U}U$Hf&:cU _a{jZY3ak2`\p_{*lN}ik{ "{-ZԘҞی>D#o/?rk`r,CtFJTυ-kRlgLL߃^O8#@<{E5^YQ\xs}}>KS[cJOtPZDn > @!Qnvc[mPSS bXHXHoқ@"U9Eѣ`m1E"a3[<5LO4lOZw# "0׋īsIyE Qhʝ:O;g-2˶QGu#m_=E..8j#ZbL9>kwk(EMw)*|ݷXc.aNanaa fzɓ'Y9.$g&]m63H<%_k-Ll/JOqSsD)" a j{E#3E˹oWU@ xx~dB!r8c_y>b9ԨMmWγcۼsqf̘CeA~D5>kJl <7r Ǚ]sS~x㹜o뭏bBriO뫛| [@\۞%Eٰe~#8mFAZV0s̗BIsfaaSLXWWIGaPb4lGQM4{͞kkswSqVJyKA*VP/m|!Ny/@@Ҍ- F(F 9؄֗" ^+Dۦ;SO8xnlbt08?mC[K>L_DҎ}q裏iqH{Gsyƌl͒{7̸_Txx}od6'uEC\rq0w BT0s s sNj#{3L`?*sJ !Xlvb"TȅLxcY#g`,׭I~*8O|p;9 [ CϞTq/-׬c 7GC! `$Qy ZxzHs g䁫 gL!= 08|оUj0^x؏o>aZ99'v9ĦSZJ !Ygvg#^Om!aH7Je7>vPťn, +|unuzyޔz/OșF;8{ywys{ .vR})F !D?AՏDG޿o[KKA5!Boyx /ʶ$e6l΅` r,yZyǛHg pяkk}nhOEw%Ms R *A5D26JMCE:|}vD,!v\lѾ9b ٛ&GRIF_T59 { &LF3B,%̠=h6/hݫ/aG!09pF q4[t(gǺb1 !ךɸ}LܐrCS|rߝ;‚b56sԃe쇃fp!XJߘ'QH0=Le y"Dv6-#0忢 oe]̙l-#ޤ|:(#{՝ib-,m"ɣ{KnJ*$<śz,qzރ)[l d3SO3S>yYNL, sAc̒ƅb!f xoDl(lR>"DAM8S` .`$,Vַbq,#YAK} |9xFKpD;uŘ')Jx g>hC"j Ϗmgr0|ۣd 1,c#14s 5 !ĒCu#U?F>Q#.Qy0@^+$:'B QQoV4=@'ؽ[XNroڀ@" BuR;Ꜧs!;5f=?REt(:τ_11QrqП\o$%_o +gu?l鮽ھZICB^;[B([귍 gEQ1aǍ=\˗tv{'8KmQ 1wdڳFӹB5{7ʐSX~`#,X_l'C0i]~Ф9KŶ3w~^1gqu dm_%F$2HtKF&ɍwbY \R}0o<sQ_Cf}Yq< 3w*\!6Kt¶ l\sgLb%Hq~;7^ky3kjr҄q݋/ث@`{dTc֩SvI}pE?8 }Rf+B̑g/_Yj3-˹A/[RPKv~]0yQQ=pZl['tFXj{-W ?f1L[Nk3 *IՐpi171GR~܌ Bŋ?~A$?>glR5vMPQ$RGUU* {kx-Y^ΏgO7jҤIC/Pd<~qkw<@^o|na{=/)EF|5J40|p40?j 1Rb47Dͥ#|kF̜3*FRv=?J!k}ƾ\I~BX= ǑgLJ?@jfϞ77 !U yP0^o[nc0XmgrD!¸^_ {瘐|XF ss*1o=s&MT]!zf3f 3p.ojn5X011&(6 U\[LYb#zFɿ)@1A# ${G#?Zk??َё Ja瀊 /hs)Gi66&q6d}ii7X9*L6O1j[['2#esn?/xv$1mKBfX>FJ+)^ ë5;^t]wu>^ŋ(耶Lz&BT)[e51ȢG/) ;IyF1\UTrMo-A;i|x*T|bD-#KD#A (=E K%%'l뭷z(Urxz}&;+D? Θ~4rk_ZgՔ3# g͚.2c8z.{Ia,a{$ƞ;C=G8r,p6l{3"MN&NMS&Ү|W}kާܵZ&WVaoWU͋]JY)Bo>gj7'ʿ? ?ܘυssf(20F&` ?d?U &O\cUnػ]kuox =0gOVy_آu%B}qyws577wD}-_RႭSN9ŽKyA*""q"p|8HL.C;L gD%R-WRV$dGhp'AU᭷ޚ!t̙Lɓ y[8~\bK&Xgg+s_)u+Vѭ{[n'xV nՋ]UvbWؘ1;]ɡ!ȬA*`N;؂ !Dw=DXX|9}-QB_Jqҝ\u]]/Mƍ{ĵhM7a3ǿ^{x/Z\3~gs\nGVUh賦LSP#W]ucgv󄧚0V}bĉt?xޭG^qޫ?W'Ő#q( \-V/leT8k/6n{KBg [x CŖ!næ@೾ﺇz(o0?<{G} Kp~D0sHZY'ք_(ڲvbvx[uns<|gz 6mD[nnSk]˾rBJ-D,$FQ,殺}9 &L-**L/18f3iH ?wnI lgn_fǻ\}رgLȼjb&fq+07^ky\k&⑅|M!Wa,D([w饗W^y% B4!q7lA"I]\{ok"L]gu\}ȋ= 2DSdTT3Jl#%av;?O۲xGI˲ꪫ@Dbў ({43lBi|A&N;0͌} ohm`Gz&+Bgզ]nc77iu:m1m96 :l' lw6}mh[F7*WBeR]uG~ fbdN~m B)8g>MVbeKs O\n-;sݸqkBKdr 56mxlPT)8[:޶j*lRW6BE!Y<׸[+_$3?s|;(1O&NMB#?CPQThE5 fmq54\xǿ<}XB5Q`gs+75slِ@` A:ꨣY4 Y_ ,|T js+@ypV\r G.P|&AO͖,/~!*﬏ʵgWS= vUOGES2s8y9Fu3Lj>Ou=zr#ļEc3nKպojv?bIWVpl[n9K(zn8B0xzv8/Gk?)f9B !ĨRM٩{,&RpWSski% |}nke(8GC- "e5p'|rDۻ!η!n U]tV(T:Yo Ml2!,D1e]3nψgMGSDIx3j#^˳'b'F~ ԹonyQ{N)_L\JMnQ.0;DҰS+nvۼa<2cn5;۬T{BQUU~Hمqm I|b߽Lgx[o-|p/?{ ɡ4o,Ob/mf ~8wgCG W7U!PT4!V[ A$vԩ>:$~|>_9NKέ}<0$ '܎` cQ~Gl;YyPqf_csc2y2no}`2] k՛wI/Kd;[_9lu/2kB444keˣrp)WcVm5gfE oƌ9çs_Prm>3l{9KQvA qo 4D ɚ[DrVWCN 0 z|G}IR[ADg }] ^Q_}5po=#Ù $TL!e.r-FGض{n7A2ZZ|JNoq:.p M:L ωZq6bB7'n.^&7.REDŸ[+uW sBnƎ[bD|fLW$Gy?˖U:ҍ{0\ೢJ![@._xby?x/< I]èV|6,3#{x~wKEQTyܮ4ȖU%Oru}5ҩ ~iXE 3UYs'$R)] 3%{_ jv @"#X[ĶJg}Znv>~@ M^hsS~^Br.,],=q[XhBz&LPih MgQ{ Ʊ 6&ꮮW>Xc , ̎7hIKEi   |ނ4\E+H`۟/3Hx$8_ p/I, gYp Ap# !HM"f#c^1~HG[ɄZЭxBh!FŐ\qkv"v-.9lsܞaBͤIj)`&lǻfZ^ޥ**v7 P.gUT, ,8÷$#ʶ>q*#8֓ck-bkrwbŒZ ) ifdAI|^@0ί%9C5FL:_ꍳs0<חz-[*A`eikw)`Yt'cƸ1& |?[]OM>@ &lZ g-s}3PV֥$saB*`9=ёOby gH\VXS(Z[gy,fڽ=QX4XtŞdD=#x h9"6pY\g-^#xڴi>6)mƖ׬&~m_#UPDeǟqa `DMo^#8G֏,&]88H^\xD9' ^T*~P/T .)-vda[Ky9lXwNsBnN:sDI4ΩˤV:F$}y/\{&{%U9#"2b9s0朞is耊9aBPқ7orηmnUMG{Ю{=w/ɽ/mȷm`:x|h3t7uʔ)6Ykiz`m7#] 7T]N,q hk|gs"FrCeUfoW%X&4X^xUĂPϊ^Mz><5[l$j/6J>mϝ .b96 ( }@EFpA҆ڴ6~7)f :DB$N9唖f/-/oiYϯܔM̱.K9tvM) {ܛnSQQQYeرC96ʳ̗'eS>c LNJ3pܳ*iÖ-=@pn.*yꩧ,Aq{5 $|7xǨqI>d)//e}є@ ̤IKԳQ٤;0*03P ܲcO,~GH_lK[;f^bƼRףЖZej7`K8$9supFI)ykίoTGo<Ԓ(LϦle. LU=r( ;{o@[B٩ <+ q/1c}.HnT\r3fL 5 .sRX ^)@:諎 ,D~ǟű]i/(M|hT\%9)d#^bpyRx)q#J.7ï0S߳p@3ZpL $-d=W;L 8e;q ӝ_EEeǏtFylKS:RVs`}ѿ4\j]Ttm m"$7fpHV-# mW@C.c5 A7TTؒT>oj2gJ_""HTǀ.U]`ܢgqF#dN" `nҥME>_*/ꪫlY<4)79/ϺU`QؚƉ ف$zUM?iYH}fJL87Cz2)%w^kKM6d***kl?5Sذl9,\Rrɟ'˔kBk:"ٖ* +l$(\3dn^rq@f&=׽xY UTTT 8U ΓeSri [e \Yym m vBby8jR"_HIDX2?&9+{7oc|vE@ێ;ةgV] {*%KX h&@\{LMe?Q4q8BWR | n$WłuF3* t*) Ta-IYҎf7co<_eW'wlʹ>U(T(^'TUն)fK<&^<`-I%jI4hPC>ZSUv 7LXyfOESy%#XK4n\\Xo&/~^{63]]iC/Z 3X",6t3KY->=׽0.sOw-$Q", $2F u 9x+\[-5VW=gݯy@w=،TA1 $Ub(?;4׺* @yɰ*Ho@_rO8т@b3ڦJ+^OB%p3u+l/dZ.x{k-N@JҾ3Vn}ªq_YoOYQІ `y?Mh|ay${Vܺj)ƸI /<,b~}n2cB^?JlfsY\6ѣq I$dCM2bxcE#?B8T%(MJb WT{-H6':Nu ѨWlP찃͜9sҶA,y+ArXN{Ͷ{ThɝNmZ((|AϼV_ Y[ H.N6cf 9Mf5-40w89$ 2E<{t穨2jԨz>FIu  45}kiɐF۫̆>`!@A*@,NfvD#%O,U ^qy* юd_>8Z9?#z-icA0*&.b+5|GjjԻ> Ϝ93sRn=q奔L/|G{g_M͆Oך s{._lA2K̿lA2/.HHʲ=u6. 󫨨2bĈ vxڋ![x+K-_~f˯h9i,a> bsi\]??~Z0$Ԁ7޸L1\ArBw&+-8JևEQn;b[ BՓ_~9eV0ω$K*)T{ˇz2dH>fhm+JjUewWzȘuf੫*`]vFwa=+ݞfСC埓D6= v qp@JKwzHCûBoCi,OZ`+V[oҬuI6lӊ+c)ư d1XrOX#$#yBmfAgQlIk/|[,=~S78V PGЫ*o|- 5GxZ{=| ;n;y****k!Y, :(w˳Y s@jk x^^K/l[a&m$;\Ƃp}P?%PK%CM@ o Io@2F]N{q2H}:P%,_R=x)7!v2Iɧ~jK ~#>/S2/Dԗ;8fN,64gw;L&lj;XS.\SܞfKSSS3YoZJӜvpyU@S0e 5 imܠlbKuP/v}b sX U¨ϗ~F}}]% #RWm̯|C=d]x޺%;+v b鄘P؍7XA?%%C|`8.b7&(:ux].}WKz' P4h)6f[lw sךͲM0lpb` 6s=lqnSQQQY%++K.K ͳC [4  yy;yAZ{rDmm;s85i"_@@_|a.2 fnSA,86(`Y@X.k'$`)s=fy˘ܳHrqp r_(fmUU6te?+-~l6?( 00U̺W zf&DB%/bi2f>3Ê|!nv{ʚ- CgD׍,`[Č 7xTg]kPiNٳػÒ DžܞDFg Ay;18T 6'Y:usU܋{roC$ ȑ#m1ȝܑyqݪkV:`BdؿX*>9WHilA|ʛ3f1H8(_d<_&q$Pz/2^{xWr~QlL$rrY3avXI2~70ZRג*Y][BT?ł UTTT|8Pt'љ? 7vq$YP PTVfwsU܋{rov}U I H% Xoݭ 0#X꫶v.3mk z غ^4vm7[T :w|us)X^tB(E.$/Q{SE㜠7+5c_f 0_`y4C=a՜aOZk픓OEEE%IYr?Q)hDl xXS PDMIi-3pnLXd'="v@4E㲳[e$ ;iq?bm[mŐo٘ P\R8yKLc$+9-ZWZjҟAhKXbҶT6ջ7W>oL$'bA-6RS 4 GN#{{W*Ȟv ԝ^EEE%IEO'&$C#| Fl)p45}Mn܃{qOMh mm߶cA RA6$@ I@ˢNZzCY76dz8XL!f}fOVW/+x ޿3+M69O!.q>K|&?ݞvJ]]]s<ם^EEE%I(r6Mul4`="U҈ƒL}f6^}imM_|}_++Mds ԑL./7C A]S5p=by@x'k u:dɒmk~է~Rvnc+**U/ ZhI0y]s_d`&ha ֏SF-5 \s@d7 IIDAT-6wUڽM2lp Kԯ>QNr*tCY]Ɔ=m粲XL)UTTTq#%[ 0$0E",\/F+.p)+ս"miYWkqM=w_@[hm[|Ɂ/ o˩?IV$2C.%>Q}ݗ믛]wݵXA@^|ښ!ƌCClܹsSf{V)kyt f?+ giS疖ZW{G #5 bʶ̱ гBQGuf*LAp,{<ܳ:I^c^J61JҖ4vSf׹r7n Ln6&\#q6^ЦTt$E'U\DĀyqebX?p >gw)&BT/Q1k2=VnOOPǕ eef\w.@(]Μ9ӬX"5 hUjk+n:Y7`xa%2y!Sn^d~3ˎec5QJSu3ܐ}/s,db=IQUY1ϒPFf-eD%[r0|ގ[kl]>{f[jMM㦾]GS?~5sqo@[f -rrZHb8C,t*C{VSVUZwYge}ݔD| eB ȹD+a n_2 K)qWz1qR 8[y^̛7/3"@|[~_*66+\_QazY2/X p/KRM͠)fͦ7ڒq[|ܪl/X fiuf-B,/yTc?Wأث&j8/u|gSRC"իC;e\kqM=HA}/En"}gQU|c^Ǐ0`@@ S >@r̦MLᅅFG'S]}ihe4_ [W8Jmle5[' !bX _*+olf-AݻH EY2)R4 5i2|-u{キy'-Av*k(\:swJ —Ca'yIp8|6sD<o{|P# BQ q+Օ;]jֹҬ`-6{~M~]+\:!UGU)vo7߻x]q8:feeM_BtE_]` |Ԧ q Bfdـ|a0wcߔ]h+@oK-3w,=^kq̀/{roڐY(/CXBLO큿Nȁ`WUr#} 仸q{,G@!TCt27 Eҳv* @`O po*5cMNsWd1o\ZIMQUI/p^/****)IKG)r炁_m#_}D}ސM+pm(ZS[wͳ.( t (;n1hV(J:\|~칙)Iw1:-VocwWz20E~[dM],yH&e٫qd3עd>R>9yNu^jst8 ****Yw/cq…)O(~kwp @7N8SZz)+Ԃ=o|wn4ZgBV\\{p/9'5\LX(3)`6m|[,k(S ߾5َ$.j7fJUH@+4,˹ɮK t)t-^xNU6^[yٟ౤ dϩ(<6ﶙ^,m%vb-rK Ǣ{xqXHٓ؛أrWGsssJPnJoY8x2Ʊ/"a R9,s,6L3wચٮ+^3X(2_㎳5wS%W`mzG8{\Aٕ<rzObq5RoI J$adذa-1W9{#ngQ$ZnJ뢥. $@Ӳ[Kr1dBH@ZÞ .w,1tŦ~ȡ}-1$0:jPႇ珲nt| F=ic_ۻ >|OTTTT2]謀-$ް6mr& b,,9y:A_ɵ{ % 2`C|rlÒGٱ[nź U\pkK T8z7l&R'Wx.\X xM=P6a!$˜{$2t}z\uāѣGxKbSe!j["i?!+Y=dE<^;\Ybyqڽ<[raNr\=ڤo~\3c]fx6\7GW@ ڬ۹JDѷkkmN;4 ɖ>~^?߾ĂMG&*U\M@‘N,X`N:$لB|@+#C?gtCx!{^Pxs$;` / +ǫaiι$Y\^^nKf6ۀ$:0Xolȼon_-5óQ$5{D|UTTT2hm A  á2<\3/ 7,c!8AL/,l]Xqy \k` _=C>cR%Wksϙ#8ŢƳ=ȡ7@ dmV3/bZPB"%IH&\܍ M&(UKvTp 7ܐ{ђc-{2k! #cbx≔d/4i ){SVHX撉;Nȴ!IO:2Nka(B!!Ϟ,Ty6,C[s(̙Zya v1'zs-y'.90ӽtلr`P$Jp  B ;3w?:L~{\kqͥ{Tv5B28åJɼ?h,pga}. n|$F6xc#%<~y94d dPP+F%^yO[oY/.Ye5 W>1`{Wdp$:]ryI^{w JMA 2 -z-WJ_byÕH"[:Z>$M7\~fҥ嚮Ja#ßCS 8n殻2 bI)-LC :.B~pb9xve8zeΐ<$C\nh( 5h{/)C.z77_IX,=k!鮎}zAʜJV)k****H1ܱXh0.@T-]P| ע&+$o|w.Yϻ9o뭷MIJ|WY8PzI(Q+\W{K.fBPL>z衫n9Ro,A@tw"DKVhs: (ܛryFaN; d=X[#U)3*&f0B HF8Pm#/tW~oȐ!6ψƫLʁh~hOIbb_ AKD q$)`ϰ=v&ӻ?,sxiaj z˜k'[qo|w i^R #.ë,]?Tb6H De8ƫuAko>W_}eQ_)4\׸찤zc  n,Qϗi]X1tIWa׈$ж\KE{Alc}m,`$Z̔ 7P ɞ%#9B*U6yY>eM:I$:AL->1|=ҧz Zy'`Se?&lquK{؃*|Z3+V붭B2VO{-73uS \W* d7d1G|_|=Sɷ~kk(w5MOIbmvLQ˚q$l1>`|gX^t ('&2{̺GCh(ꨏ<#z"NSiyyYwu[ ;ʞ3UIzEY5CEEE @,ѝ$V Pr|qyq|U/Bʼ:Xp)ʍp/w@eBww$k} Gu5K'$y-uQ܍ěyɺ f$`e㙨V[:Zg_z%i̙3ṃc]#.NEwEsOJ[pV/ʛo,ZWf*+V0}:u9SI'QV2 6Z.)QxGKC&< 7pD4{S; +JׂFcDp Ir@iQ'%[C99&H;=!pĽ{ֺJ!$pz-P $ƌU!t(.g$0Kc`{9f;ۚde?쳖71} P,XGzy(.ME: /I\^QLF5IVx4k 'NVY]UVon>h[38փzdE}ŭ-eaa)hCʞtLEEE۠]ݱUTTTPrDNJN $ZܡXɂ.f %D }mĿ{m̙ҪD˛mY+P; {]KtbuOP,SNE=%cYAms7x#-sr6_6.lKR# 7yWPpE(@,Ǚ N'$. 4aÆY@ kdB|j,XsM;cA4@ >-o"JJJ(SQQQzJ8- UŲ>Rj+.Bܺ*QQW.$2v!.q1H&B3fXk'Wlu V.5 /ЂK/;<ʊ\p?ss[h\a܄_y`m[2nyi`w}7:<[<Yd^ֲ ! 2Ξ jj]?ZP+?6K,}I;qy, }rLTǰהǏknn,V+t@͢?ppQSuQkvb5wїIT!,MXwp|4/Dw*gh;bHb `gbEy~k$SX 3ͨMesmK`NRyBLdKCUo<AȫLbݷAyBO3@yg+[T)V : ,^`;ŽeǸy3DpًR..o;VY 8\|ɔ Vg͚eIsBG=˽~|29Aw3]u  $[x  :>jl2j 0䵧ad ,A,dϞWc7yc,`@ƕKK-QurM\8k$'7|cګj{9kAs뭷(n]>#ә1G2yZm2&8@` q}+u> YY%EEjSQQQf!!d<zo!ҍK<#ӟd+irao}mQ3R'$'U H㏧&%< P}}@% kO\&ܟP^HW'TL\*Q<)RK#qw'x6mj=0 D<#Àd;1|7>cn=aO۳Fr}1_<>@^}@r_%)ִ/=Fh$;JV r薄VgJR.%P`9+rÞVTue9p`5^@&Y=,0HJH' bp\,dőru v,@dSđm2ǩu NR,qA ІF&܀H H\Bz߈}Ų8SIVY}w$p<}!~P,V۱J D$-10Olٟp$7} Ij΂C,Yc9IEl;"QGRJMfߨb=Ƴ@M]r=_ /(v1XLqmAΠ8Ɗ ˡ/!yxV\#H 'lC ϟ1!`&#&ɅZ}==%uŏ*᳇bUV۱J >JHmpQQ͢^~#}A@A X͠܀#+*@^q7dPS@LN:ZR܃$ 3-`>Jį" <`I[ogAx9MwG?#@k(2p{Jzxy_27P^s5v\^gcxUe˾w{̿ 1(۪2~_bKEw}KtQ#;˫'tאַTvAKhY?C3yd˝Uyb5܊ÃF&0:b,^X8u,/e]p X:E+B%Hy&MV?@ [5nvm7 r 8`_,l+ߗ~C\~ pͤIOYSݡ]{|N,.Sf`9e*@1 n.z輀sHu;.dYr?=WCwȑꫯqd?,9|v/9?0P᷊Yu*:qEpxV d ܿ/ 9ԎgقںT 6=ŲNzW_}e>CjFƊL[ȗJB;TgЙSe&)yE\ZJ93|gƝna\>b7^fS/X!I o#xuY@)qeRt;|xzK >mM"mx,6$+OEEEI躢W~m9r0rX4{Yiz\%ݤInAM{ R/˔]mwmHU֚}-d*S-3$]K+@jk L\Xg'NS7w.~?~x[hG-!G󲎌)pܗ$|P.3"`Go+y@4g}w}u%s'ASb&gׁ5e=P;XQ<ߜ J   ei=|B|ݦh4;PEEEςE!j Œ݉!m%tF=t K{BW˽D|ĝ}.A+- ZW\5,~+,P"m_UQa߷d;XÇ.}H98'z!@ H25 Y(R,X)A,g}~w<Ԫ&5d"v~r,VL`/`O`o(,p0ǝwR;x..!rVUemhƅa)jv;05W{|2W̒{g'Y:9Β36SаS7I8Xuo1PVBfH^-$igV9GNǎk-t;9ì ǂGI$~ DK{{#1#j.ZָYJݬ}8{]΃b%|VQQQt p?Y.qϱ?,n<|8:Vjri/^d+{9X@ğ';d5֞1r caK qJfgi9z h|bI{s_S(cz":X}IF(nXsM2y>{{AhgWL)FF"JOA !0H I0qN|e.BeGqG94+P)6k}=w9HrlML(xt PxH= 5' 8S>:FoScj8!{$w,ޑt1GeNaE%ܳ kJIKg=TQ(5$ҷ{_ $ ~,"rh#}Ӿ0x..KL(ߦY*J;= GZUep<%䚗7wmSc@ 8WHD,sf̩`K^.zR@І((ì$kjYlrŒz.ڈ2ߤoRe^Y۬q:k VY=bpZqXTTTT?,=XtZU 2=9԰.= 4+^yOʀ%.=]⾻bFc{*7pX~_.${wvgּg ƥ 0X01phd%v+6}w Q ;ƃ^#ڳاXIY?=@_ȹTTTTTF-5(Kqo-ˆ/;Uwۊ~TU2N3O b9YH*-eȌ%S@"17Oq߅8 &IyN@ g-mxѯ'7GWWEEElUHdX* #zo(?p"liTU+ԁH#Q(k/')! Xv߅C7>n٢zTCYQ{Y?2kzCǏu"S ZCEEE7&p*\ ';]/1uc1y qC}5SUUm7kf-ڟ^ޠ;oTC`WG";w{cˋZXDU5VY]0k5oƭ EEEE/EP4 6ɡpv4|-x>b2"-, kKUUmw5ڭs._<y>{{****kBp8wx<>dht7u"Cdgڴ94?,VUO)kefYpk5g`/QEEEe sB`i8jFKOD Io] gY`U>Wy+l"^[X}MPQQQYC"(}Lt^ ԋ>7>. w^YªcsE$k5ZM"[ӏYyTTTTp r  >wp!KPxѮ*TURwXE$k5ZMr.tkzW8k=W>TTTTTJB9GOsE%Bĸ7WV7-bMQU1Ck5ZdM洦y٭ݹeYaTTTTT< zH$kDwpKæ 2sDQyVCZU5Zcͱ \YDZfMp8\!IS4zVY_|lsHEzTZGXUuXS-k5Wk5e uGSQQQQH@q8FZӶ.'2a385[c]UURQU]-zk5bXs*[mY]p:}UTTTT:#rD C`p/g HjI r@[+++uuÆkRrrcͰvXC%k5j٭E䭬QjUQQQQY] p,?*%zp oH |ϖ0+L3ȡuSE6`Y9UU3cfX;!k ۭE((k5Oi^TTTTTJ p0H041dH B)3ۢ56K]ZUUWY;w/kša]<ѭE$kSQJ`px/5}!@oq .߱ ;r=M=a9@ZUu3kafX;w٭ۍȚdm*TQQQQ ¢dT1.[=\V7Efrn9-P,Dv?,J@"'ð"19/ϜX\l0TW[R\"w< .T27U,s9\fN3_[~rkb[#'fX;e SQQQQB`m$DO5[^H+"(A3$3gg Eeeњq}1ޏe2ga2suqka[ k5ט?(d*HdˁؔP@"@"@Rpo,-5UUX9hgVl^sȜdn2GYn~Y9`mFX+1}*****]]JAE8[++\?+k@}4 @;<q6p~BsjIu=RSc^K%Vae1E~.c1wnZ`M6X#UQQQQMJQ( r@N nM)nSEBc̮Rs_uyf[BefRȨv127^s9\dNM>uxÎBDhԒne&ʁg~SqS`2U`n0G+sĜbn1ǘk-}?9zݵi6s\៊J;A0+ BߕTE"<=|(_+$PD)7'6.̱r_鲇_3ˡՇN*6,r257ȱQ0ƌ5c3 sdeD۶y`_neN27U,s9Vȧ! X2ic@l5lx|S9O#"a$k"3QۻUTdڮ,/VZ o5v7ǘ~c͘3s…œaۏ;3'Q*sm******``U}XK0PGK$:5pyPkG],Wq15rŕfJYK@? ֡fdL[Ƙf{s!͍hvs9>sWWm******] 9`0UF"u('^-k N:f`,fdg N).6@&kQc{7o1&MbKJ2cɘ21c͘9𗂾'7^tsj7ǪsnEISQQQQQA&y(?*. D"[7FGG"Wƃ{+O>p֜?R % `@Pሢ"[FX QWg^CP89.d~s=\b W߹κGҷ1}Mcsrl.cݜsisĜbn1ǘkZWEEEEEDHI8dŊFBD=7"xi*P@Xh2@rsm(Aeee&D"X}\ rKw!}Iҷ1}M%o0 c-cUs]L_͉n0Wb0K)sL;TTTTTTDP / YY8Ľy,A}0P 82 YXh.t`v] 𧍍f@Փ]\tcr~@O2˝ӥI?;O[Xzp'iٍns9\a0wjSQQQQQgDp Tù hڱX󨬬#-+$#zA QY \h% p439 !e'* "nKJd*+mlvI&T :-Qܝ ¹@q<}#Us}=3<3N }CW}G@}K9} z.Ynosc\`N07#L? :HVN( Cq8wT> :Zt@p  t"BepQ*+\ *(N)1vEt}.Hrq죖N6VxxFg>¥O<`G_gK4v-T-ˍnwwc2ʼnydDJ㢢[F`^(/ Kk"M!؎##5]I$HT!Yh.q:%& 9FeeI~sLJ (B=!ϋͥX{P>#.q5\Bŋ^ܛ6x[fi#mʹݳy3<3NInܶ.tc3Í2%c2ƌ5cGʧH(0DbBbJ@DMW(@NQ@¢cGA Xuu fShKGEE;Ft&[r{4#2),p\ =[n*mLy{.gyvY"1@B cCƒ1elcƚ1g!]*******H,a ˿9t00WV^&Nf AY Q0((Fܙ`qrId3P>D7t +;]b,pO.d /QcEogg X.c&Y]C5񩨨Ȫ05]k"hhH,V92o5|TZ6ׇG>.,7&o7********]"/(--m,:ҁb<߁D,[HXsJ2\<:@Pnkl 3|7gYow}5Hחo \_G{SQQQQQQ- шSa\4K4;)v`K(E Ѣ98@~"<}V.v={}u{?gM,wQ_z=~c`ͪ $D)[7);HļHp]'z蝁Dl#h-CHX^s:\ w﩮-@šwkA&k=ܳ)SQQQQQQ@/0._N EK g(6t:Dt#eV!NpԁwkOUg+=k=?\OEEEEEEEE%Bhhv& #H@N:>:QP^^^8S-**VVVfWWW9o|֑kqoڠCq$ Dь5rrrA7>ȵr,z`#IENDB`svgsalamander-0~svn95.orig/java-one-2007/build.xml0000755000175000017500000001712510614346724020535 0ustar moonmoon Demos for JavaOne 2007 talk
svgsalamander-0~svn95.orig/svg-example/0000755000175000017500000000000011562044311017033 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/test/0000755000175000017500000000000011562044311020012 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/nbproject/0000755000175000017500000000000011562044311021021 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/nbproject/project.properties0000644000175000017500000000456411524225604024622 0ustar moonmoonannotation.processing.enabled=true annotation.processing.enabled.in.editor=false annotation.processing.run.all.processors=true application.title=svg-example application.vendor=kitfox build.classes.dir=${build.dir}/classes build.classes.excludes=**/*.java,**/*.form # This directory is removed when the project is cleaned: build.dir=build build.generated.dir=${build.dir}/generated build.generated.sources.dir=${build.dir}/generated-sources # Only compile against the classpath explicitly listed here: build.sysclasspath=ignore build.test.classes.dir=${build.dir}/test/classes build.test.results.dir=${build.dir}/test/results # Uncomment to specify the preferred debugger connection transport: #debug.transport=dt_socket debug.classpath=\ ${run.classpath} debug.test.classpath=\ ${run.test.classpath} # This directory is removed when the project is cleaned: dist.dir=dist dist.jar=${dist.dir}/svg-example.jar dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= includes=** jar.compress=false javac.classpath=\ ${reference.svg-salamander-core.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false javac.processorpath=\ ${javac.classpath} javac.source=1.5 javac.target=1.5 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir}:\ ${libs.junit.classpath}:\ ${libs.junit_4.classpath} javadoc.additionalparam= javadoc.author=false javadoc.encoding=${source.encoding} javadoc.noindex=false javadoc.nonavbar=false javadoc.notree=false javadoc.private=false javadoc.splitindex=true javadoc.use=true javadoc.version=false javadoc.windowtitle= main.class=com.kitfox.svg.example.SimpleIconFrame meta.inf.dir=${src.dir}/META-INF platform.active=default_platform project.svg-salamander-core=../svg-core reference.svg-salamander-core.jar=${project.svg-salamander-core}/dist/svg-salamander-core.jar run.classpath=\ ${javac.classpath}:\ ${build.classes.dir} # Space-separated list of JVM arguments used when running the project # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value # or test-sys-prop.name=value to set system properties for unit tests): run.jvmargs= run.test.classpath=\ ${javac.test.classpath}:\ ${build.test.classes.dir} source.encoding=UTF-8 src.dir=src src.res.dir=res test.src.dir=test svgsalamander-0~svn95.orig/svg-example/nbproject/project.xml0000644000175000017500000000175511345751075023234 0ustar moonmoon org.netbeans.modules.java.j2seproject svg-example svg-salamander-core jar jar clean jar svgsalamander-0~svn95.orig/svg-example/nbproject/genfiles.properties0000644000175000017500000000073311524225604024742 0ustar moonmoonbuild.xml.data.CRC32=5288c6a7 build.xml.script.CRC32=1da34372 build.xml.stylesheet.CRC32=28e38971@1.38.1.45 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=5288c6a7 nbproject/build-impl.xml.script.CRC32=bb49994c nbproject/build-impl.xml.stylesheet.CRC32=229523de@1.38.3.45 svgsalamander-0~svn95.orig/svg-example/nbproject/private/0000755000175000017500000000000011562044311022473 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/nbproject/private/config.properties0000644000175000017500000000000011345751075026057 0ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/nbproject/private/private.properties0000644000175000017500000000024711524225604026272 0ustar moonmooncompile.on.save=false do.depend=false do.jar=true javac.debug=true javadoc.preview=true user.properties.file=C:\\Users\\kitfox\\.netbeans\\6.9\\build.properties svgsalamander-0~svn95.orig/svg-example/nbproject/build-impl.xml0000644000175000017500000014271611524225604023620 0ustar moonmoon Must set src.res.dir Must set src.dir Must set test.src.dir Must set build.dir Must set dist.dir Must set build.classes.dir Must set dist.javadoc.dir Must set build.test.classes.dir Must set build.test.results.dir Must set build.classes.excludes Must set dist.jar Must set javac.includes Must select some files in the IDE or set javac.includes To run this application from the command line without Ant, try: java -cp "${run.classpath.with.dist.jar}" ${main.class} To run this application from the command line without Ant, try: java -jar "${dist.jar.resolved}" To run this application from the command line without Ant, try: java -jar "${dist.jar.resolved}" Must select one file in the IDE or set run.class Must select one file in the IDE or set run.class Must select one file in the IDE or set debug.class Must select one file in the IDE or set debug.class Must set fix.includes Must select some files in the IDE or set javac.includes Some tests failed; see details above. Must select some files in the IDE or set test.includes Some tests failed; see details above. Must select one file in the IDE or set test.class Must select one file in the IDE or set applet.url Must select one file in the IDE or set applet.url svgsalamander-0~svn95.orig/svg-example/src/0000755000175000017500000000000011562044311017622 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/src/com/0000755000175000017500000000000011562044311020400 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/src/com/kitfox/0000755000175000017500000000000011562044311021704 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/src/com/kitfox/svg/0000755000175000017500000000000011562044311022503 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/src/com/kitfox/svg/example/0000755000175000017500000000000011562044311024136 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/src/com/kitfox/svg/example/SimpleIconFrame.form0000644000175000017500000000303611427227157030055 0ustar moonmoon
svgsalamander-0~svn95.orig/svg-example/src/com/kitfox/svg/example/SimpleIconFrame.java0000644000175000017500000000407311524225604030026 0ustar moonmoonpackage com.kitfox.svg.example; import com.kitfox.svg.app.beans.SVGPanel; import java.awt.BorderLayout; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * SimpleIconFrame.java * * Created on Mar 10, 2010, 11:25:47 AM */ /** * * @author kitfox */ public class SimpleIconFrame extends javax.swing.JFrame { SVGPanel panel = new SVGPanel(); /** Creates new form SimpleIconFrame */ public SimpleIconFrame() { initComponents(); getContentPane().add(panel, BorderLayout.CENTER); panel.setAntiAlias(true); try { // panel.setSvgURI(SimpleIconFrame.class.getResource("tree.svg").toURI()); // panel.setSvgURI(SimpleIconFrame.class.getResource("data-uri-scheme-test-image.svg").toURI()); panel.setSvgURI(SimpleIconFrame.class.getResource("marker.svg").toURI()); } catch (URISyntaxException ex) { Logger.getLogger(SimpleIconFrame.class.getName()).log(Level.SEVERE, null, ex); } setSize(640, 480); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); pack(); }// //GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new SimpleIconFrame().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables } svgsalamander-0~svn95.orig/svg-example/res/0000755000175000017500000000000011562044311017624 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/res/com/0000755000175000017500000000000011562044311020402 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/res/com/kitfox/0000755000175000017500000000000011562044311021706 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/res/com/kitfox/svg/0000755000175000017500000000000011562044311022505 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/res/com/kitfox/svg/example/0000755000175000017500000000000011562044311024140 5ustar moonmoonsvgsalamander-0~svn95.orig/svg-example/res/com/kitfox/svg/example/marker.svg0000644000175000017500000000146711524225604026156 0ustar moonmoon Placing an arrowhead at the end of a path. svgsalamander-0~svn95.orig/svg-example/res/com/kitfox/svg/example/tree.svg0000644000175000017500000020412411345751075025636 0ustar moonmoon svgsalamander-0~svn95.orig/svg-example/build.xml0000644000175000017500000000722011345751075020670 0ustar moonmoon Builds, tests, and runs the project svg-example. svgsalamander-0~svn95.orig/build-NBUtil.xml0000755000175000017500000003161110607254103017565 0ustar moonmoon Must set property 'files' Must set property 'files' Must set property 'classname' Must set property 'classname' Must set property 'classname' Must set property 'classname' Must set property 'classname' This target can only run inside the NetBeans IDE. This target can only run inside the NetBeans IDE. Class to profile must be specified. This target can only run inside the NetBeans IDE. Class to profile must be specified. svgsalamander-0~svn95.orig/libraries/0000755000175000017500000000000011562044330016560 5ustar moonmoonsvgsalamander-0~svn95.orig/libraries/nblibraries-private.properties0000755000175000017500000000000010753742703024645 0ustar moonmoonsvgsalamander-0~svn95.orig/libraries/CopyLibs/0000755000175000017500000000000011562044330020304 5ustar moonmoonsvgsalamander-0~svn95.orig/libraries/nblibraries.properties0000755000175000017500000000043510753742703023211 0ustar moonmoonlibs.junit.classpath=\ ${base}/junit/junit-3.8.2.jar libs.junit.javadoc=\ ${base}/junit/junit-3.8.2-api.zip libs.junit_4.classpath=\ ${base}/junit_4/junit-4.1.jar libs.CopyLibs.classpath=\ ${base}/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar svgsalamander-0~svn95.orig/libraries/junit/0000755000175000017500000000000011562044330017711 5ustar moonmoonsvgsalamander-0~svn95.orig/libraries/junit_4/0000755000175000017500000000000011562044330020134 5ustar moonmoon