Commit f78ea057ca766e083c53f1c0284944b96a42b1b8

Authored by Jay Berkenbilt
1 parent 23bcfeb3

Switch annotation flattening to use the form xobjects

Instead of directly putting the contents of the annotation appearance
streams into the page's content stream, add commands to render the
form xobjects directly. This is a more robust way to do it than the
original solution as it works properly with patterns and avoids
problems with resource name clashes between the pages and the form
xobjects.
ChangeLog
1 2018-12-31 Jay Berkenbilt <ejb@ql.org> 1 2018-12-31 Jay Berkenbilt <ejb@ql.org>
2 2
3 - * Add several methods for flattening form fields and annotations: 3 + * Add methods for flattening form fields and annotations:
4 - QPDFPageDocumentHelper::flattenAnnotations - integrate 4 - QPDFPageDocumentHelper::flattenAnnotations - integrate
5 annotation appearance streams into page contents with special 5 annotation appearance streams into page contents with special
6 handling for form fields: if appearance streams are up to date 6 handling for form fields: if appearance streams are up to date
@@ -11,15 +11,11 @@ @@ -11,15 +11,11 @@
11 be found. 11 be found.
12 - QPDFAnnotationObjectHelper::getPageContentForAppearance - 12 - QPDFAnnotationObjectHelper::getPageContentForAppearance -
13 generate the content stream fragment to render an appearance 13 generate the content stream fragment to render an appearance
14 - stream in a page's content stream. Called by flattenAnnotations.  
15 - - QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix -  
16 - calculate the matrix that will transform from the appearance  
17 - stream coordinates to the page coordinates. Called by  
18 - getPageContentForAppearance.  
19 -  
20 - * Add method QPDFObjectHandle::mergeDictionary(), which  
21 - recursively merges dictionaries with semantics designed for  
22 - merging resource dictionaries. See detailed description in 14 + stream in a page's content stream as a form xobject. Called by
  15 + flattenAnnotations.
  16 +
  17 + * Add method QPDFObjectHandle::mergeResources(), which merges
  18 + resource dictionaries. See detailed description in
23 QPDFObjectHandle.hh. 19 QPDFObjectHandle.hh.
24 20
25 * Add QPDFObjectHandle::Matrix, similar to 21 * Add QPDFObjectHandle::Matrix, similar to
include/qpdf/QPDFAnnotationObjectHelper.hh
@@ -72,23 +72,14 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper @@ -72,23 +72,14 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
72 QPDFObjectHandle getAppearanceStream(std::string const& which, 72 QPDFObjectHandle getAppearanceStream(std::string const& which,
73 std::string const& state = ""); 73 std::string const& state = "");
74 74
75 - // Return a matrix that transforms from the annotation's  
76 - // appearance stream's coordinates to the page's coordinates. This  
77 - // method also honors the annotation's NoRotate flag if set. The  
78 - // matrix is returned as a string representing the six floating  
79 - // point numbers to be passed to a cm operator. Returns the empty  
80 - // string if it is unable to compute the matrix for any reason.  
81 - // The value "rotate" should be set to the page's /Rotate value or  
82 - // 0 if none.  
83 - QPDF_DLL  
84 - std::string getAnnotationAppearanceMatrix(int rotate);  
85 -  
86 // Generate text suitable for addition to the containing page's 75 // Generate text suitable for addition to the containing page's
87 - // content stream that replaces this annotation's appearance  
88 - // stream. The value "rotate" should be set to the page's /Rotate  
89 - // value or 0 if none. 76 + // content stream that draws this annotation's appearance stream
  77 + // as a form XObject. The value "name" is the resource name that
  78 + // will be used to refer to the form xobject. The value "rotate"
  79 + // should be set to the page's /Rotate value or 0 if none.
90 QPDF_DLL 80 QPDF_DLL
91 - std::string getPageContentForAppearance(int rotate); 81 + std::string getPageContentForAppearance(
  82 + std::string const& name, int rotate);
92 83
93 private: 84 private:
94 class Members 85 class Members
include/qpdf/QPDFObjectHandle.hh
@@ -559,27 +559,46 @@ class QPDFObjectHandle @@ -559,27 +559,46 @@ class QPDFObjectHandle
559 QPDF_DLL 559 QPDF_DLL
560 bool isOrHasName(std::string const&); 560 bool isOrHasName(std::string const&);
561 561
562 - // Merge dictionaries with the following behavior, where "object"  
563 - // refers to the object whose method is invoked, and "other"  
564 - // refers to the argument:  
565 - // * If either object or other is not a dictionary, do nothing  
566 - // * Otherwise  
567 - // * For each key in other  
568 - // * If key is absent in object, insert it  
569 - // * If key is present in object  
570 - // * If both values are dictionaries, merge the dictionary from  
571 - // other into the one from object  
572 - // * If both values are arrays, append scalar elements from  
573 - // other's that are not present in object's onto object's,  
574 - // and ignore non-scalar elements in other's  
575 - // * Otherwise ignore 562 + // Merge resource dictionaries. Assumes resource dictionaries have
  563 + // the property that the collection of keys of all first-level
  564 + // dictionary members contains no duplicates. This method does
  565 + // nothing if both this object and the other object are not
  566 + // dictionaries. Otherwise, it has following behavior, where
  567 + // "object" refers to the object whose method is invoked, and
  568 + // "other" refers to the argument:
  569 + //
  570 + // * For each key in "other" whose value is an array:
  571 + // * If "object" does not have that entry, shallow copy it.
  572 + // * Otherwise, if "object" has an array in the same place,
  573 + // append to that array any objects in "other"'s array that
  574 + // are not already present.
  575 + // * For each key in "other" whose value is a dictionary:
  576 + // * If "object" does not have that entry, shallow copy it.
  577 + // * Otherwise, for each key in the subdictionary:
  578 + // * If key is not present in "object"'s entry, shallow copy it.
  579 + // * Otherwise, ignore. Conflicts are not detected.
  580 + //
576 // The primary purpose of this method is to facilitate merging of 581 // The primary purpose of this method is to facilitate merging of
577 - // resource dictionaries. Conflicts are ignored. If needed, a  
578 - // future version of qpdf may provide some mechanism for conflict  
579 - // resolution, such as providing a handler that is invoked with  
580 - // the path to the conflict.  
581 - QPDF_DLL  
582 - void mergeDictionary(QPDFObjectHandle other); 582 + // resource dictionaries that are supposed to have the same scope
  583 + // as each other. For example, this can be used to merge a form
  584 + // XObject's /Resources dictionary with a form field's /DR.
  585 + // Conflicts are not detected. If, in the future, there should be
  586 + // a need to detect conflicts, this method could detect them and
  587 + // return a mapping from old to new names. This mapping could be
  588 + // used for filtering the stream. This would be necessary, for
  589 + // example, to merge a form XObject's resources with a page's
  590 + // resources with the intention of concatenating the content
  591 + // streams.
  592 + QPDF_DLL
  593 + void mergeResources(QPDFObjectHandle other);
  594 +
  595 + // Get all resource names from a resourcey dictionary. If this
  596 + // object is a dctionary, this method returns a set of all the
  597 + // keys in all top-level subdictionaries. For resources
  598 + // dictionaries, this is the collection of names that may be
  599 + // referenced in the content stream.
  600 + QPDF_DLL
  601 + std::set<std::string> getResourceNames();
583 602
584 // Return the QPDF object that owns an indirect object. Returns 603 // Return the QPDF object that owns an indirect object. Returns
585 // null for a direct object. 604 // null for a direct object.
@@ -992,10 +1011,6 @@ class QPDFObjectHandle @@ -992,10 +1011,6 @@ class QPDFObjectHandle
992 ParserCallbacks* callbacks); 1011 ParserCallbacks* callbacks);
993 std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray( 1012 std::vector<QPDFObjectHandle> arrayOrStreamToStreamArray(
994 std::string const& description, std::string& all_description); 1013 std::string const& description, std::string& all_description);
995 - void mergeDictionaryInternal(  
996 - QPDFObjectHandle other,  
997 - std::set<QPDFObjGen>& visiting,  
998 - int depth);  
999 static void warn(QPDF*, QPDFExc const&); 1014 static void warn(QPDF*, QPDFExc const&);
1000 1015
1001 class Members 1016 class Members
libqpdf/QPDFAnnotationObjectHelper.cc
@@ -80,19 +80,66 @@ QPDFAnnotationObjectHelper::getAppearanceStream( @@ -80,19 +80,66 @@ QPDFAnnotationObjectHelper::getAppearanceStream(
80 } 80 }
81 81
82 std::string 82 std::string
83 -QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate) 83 +QPDFAnnotationObjectHelper::getPageContentForAppearance(
  84 + std::string const& name, int rotate)
84 { 85 {
85 - // The appearance matrix is the transformation in effect when  
86 - // rendering an appearance stream's content. The appearance stream  
87 - // itself is a form XObject, which has a /BBox and an optional  
88 - // /Matrix. The /BBox describes the bounding box of the annotation  
89 - // in unrotated page coordinates. /Matrix may be applied to the  
90 - // bounding box to transform the bounding box. The effect of this  
91 - // is that the transformed box is still fit within the area the  
92 - // annotation designates in its /Rect field. 86 + if (! getAppearanceStream("/N").isStream())
  87 + {
  88 + return "";
  89 + }
  90 +
  91 + // The appearance matrix computed by this method is the
  92 + // transformation matrix that needs to be in effect when drawing
  93 + // this annotation's appearance stream on the page. The algorithm
  94 + // for computing the appearance matrix described in section 12.5.5
  95 + // of the ISO-32000 PDF spec is similar but not identical to what
  96 + // we are doing here.
  97 +
  98 + // When rendering an appearance stream associated with an
  99 + // annotation, there are four relevant components:
  100 + //
  101 + // * The appearance stream's bounding box (/BBox)
  102 + // * The appearance stream's matrix (/Matrix)
  103 + // * The annotation's rectangle (/Rect)
  104 + // * In the case of form fields with the NoRotate flag, the
  105 + // page's rotation
  106 +
  107 + // When rendering a form xobject in isolation, just drawn with a
  108 + // /Do operator, the is no form field, so page rotation is not
  109 + // relevant, and there is no annotation, so /Rect is not relevant,
  110 + // so only /BBox and /Matrix are relevant. The effect of these are
  111 + // as follows:
  112 +
  113 + // * /BBox is treated as a clipping region
  114 + // * /Matrix is applied as a transformation prior to rendering the
  115 + // appearance stream.
  116 +
  117 + // There is no relationship between /BBox and /Matrix in this
  118 + // case.
  119 +
  120 + // When rendering a form xobject in the context of an annotation,
  121 + // things are a little different. In particular, a matrix is
  122 + // established such that /BBox, when transformed by /Matrix, would
  123 + // fit completely inside of /Rect. /BBox is no longer a clipping
  124 + // region. To illustrate the difference, consider a /Matrix of
  125 + // [2 0 0 2 0 0], which is scaling by a factor of two along both
  126 + // axes. If the appearance stream drew a rectangle equal to /BBox,
  127 + // in the case of the form xobject in isolation, this matrix would
  128 + // cause only the lower-left quadrant of the rectangle to be
  129 + // visible since the scaling would cause the rest of it to fall
  130 + // outside of the clipping region. In the case of the form xobject
  131 + // displayed in the context of an annotation, such a matrix would
  132 + // have no effect at all because it would be applied to the
  133 + // bounding box first, and then when the resulting enclosing
  134 + // quadrilateral was transformed to fit into /Rect, the effect of
  135 + // the scaling would be undone.
  136 +
  137 + // Our job is to create a transformation matrix that compensates
  138 + // for these differences so that the appearance stream of an
  139 + // annotation can be drawn as a regular form xobject.
93 140
94 - // The algorithm for computing the appearance matrix described in  
95 - // section 12.5.5 of the ISO-32000 PDF spec. It is as follows: 141 + // To do this, we perform the following steps, which overlap
  142 + // significantly with the algorithm in 12.5.5:
96 143
97 // 1. Transform the four corners of /BBox by applying /Matrix to 144 // 1. Transform the four corners of /BBox by applying /Matrix to
98 // them, creating an arbitrarily transformed quadrilateral. 145 // them, creating an arbitrarily transformed quadrilateral.
@@ -103,38 +150,22 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate) @@ -103,38 +150,22 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
103 150
104 // 3. Compute matrix A that maps the lower left and upper right 151 // 3. Compute matrix A that maps the lower left and upper right
105 // corners of T to the annotation's /Rect. This can be done by 152 // corners of T to the annotation's /Rect. This can be done by
106 - // translating the lower left corner and then scaling so that  
107 - // the upper right corner also matches. 153 + // scaling so that the sizes match and translating so that the
  154 + // scaled T exactly overlaps /Rect.
108 155
109 - // 4. Concatenate /Matrix to A to get matrix AA. This matrix  
110 - // translates from appearance stream coordinates to page  
111 - // coordinates. 156 + // If the annotation's /F flag has bit 4 set, this means that
  157 + // annotation is to be rotated about its upper left corner to
  158 + // counteract any rotation of the page so it remains upright. To
  159 + // achieve this effect, we do the following extra steps:
112 160
113 - // If the annotation's /F flag has bit 4 set, we modify the matrix  
114 - // to also rotate the annotation in the opposite direction, and we  
115 - // adjust the destination rectangle by rotating it about the upper  
116 - // left hand corner so that the annotation will appear upright on  
117 - // the rotated page. 161 + // 1. Perform the rotation on /BBox box prior to transforming it
  162 + // with /Matrix (by replacing matrix with concatenation of
  163 + // matrix onto the rotation)
118 164
119 - // You can see that the above algorithm works by imagining the  
120 - // following: 165 + // 2. Rotate the destination rectangle by the specified amount
121 166
122 - // * In the simple case of where /BBox = /Rect and /Matrix is the  
123 - // identity matrix, the transformed quadrilateral in step 1 will  
124 - // be the bounding box. Since the bounding box is upright, T  
125 - // will be the bounding box. Since /BBox = /Rect, matrix A is  
126 - // the identity matrix, and matrix AA in step 4 is also the  
127 - // identity matrix.  
128 - //  
129 - // * Imagine that the rectangle is different from the bounding  
130 - // box. In this case, matrix A just transforms the bounding box  
131 - // to the rectangle by scaling and translating, effectively  
132 - // squeezing or stretching it into /Rect.  
133 - //  
134 - // * Imagine that /Matrix rotates the annotation by 30 degrees.  
135 - // The transformed bounding box would stick out, and T would be  
136 - // too big. In this case, matrix A shrinks T down until it fits  
137 - // in /Rect. 167 + // 3. Apply the rotation to A as computed above to get the final
  168 + // appearance matrix.
138 169
139 QPDFObjectHandle rect_obj = this->oh.getKey("/Rect"); 170 QPDFObjectHandle rect_obj = this->oh.getKey("/Rect");
140 QPDFObjectHandle flags = this->oh.getKey("/F"); 171 QPDFObjectHandle flags = this->oh.getKey("/F");
@@ -157,7 +188,9 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate) @@ -157,7 +188,9 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
157 QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix"); 188 QTC::TC("qpdf", "QPDFAnnotationObjectHelper default matrix");
158 } 189 }
159 QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle(); 190 QPDFObjectHandle::Rectangle rect = rect_obj.getArrayAsRectangle();
160 - if (rotate && flags.isInteger() && (flags.getIntValue() & 16)) 191 + bool do_rotate = (rotate && flags.isInteger() &&
  192 + (flags.getIntValue() & 16));
  193 + if (do_rotate)
161 { 194 {
162 // If the the annotation flags include the NoRotate bit and 195 // If the the annotation flags include the NoRotate bit and
163 // the page is rotated, we have to rotate the annotation about 196 // the page is rotated, we have to rotate the annotation about
@@ -229,39 +262,15 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate) @@ -229,39 +262,15 @@ QPDFAnnotationObjectHelper::getAnnotationAppearanceMatrix(int rotate)
229 AA.scale((rect.urx - rect.llx) / (t_urx - t_llx), 262 AA.scale((rect.urx - rect.llx) / (t_urx - t_llx),
230 (rect.ury - rect.lly) / (t_ury - t_lly)); 263 (rect.ury - rect.lly) / (t_ury - t_lly));
231 AA.translate(-t_llx, -t_lly); 264 AA.translate(-t_llx, -t_lly);
232 - // Concatenate the user-specified matrix  
233 - AA.concat(matrix);  
234 - return AA.unparse();  
235 -}  
236 -  
237 -std::string  
238 -QPDFAnnotationObjectHelper::getPageContentForAppearance(int rotate)  
239 -{  
240 - QPDFObjectHandle as = getAppearanceStream("/N");  
241 - if (! (as.isStream() && as.getDict().getKey("/BBox").isRectangle())) 265 + if (do_rotate)
242 { 266 {
243 - return ""; 267 + AA.rotatex90(rotate);
244 } 268 }
245 269
246 - QPDFObjectHandle::Rectangle rect =  
247 - as.getDict().getKey("/BBox").getArrayAsRectangle();  
248 - std::string cm = getAnnotationAppearanceMatrix(rotate);  
249 - if (cm.empty())  
250 - {  
251 - return "";  
252 - }  
253 - std::string as_content = ( 270 + as.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
  271 + return (
254 "q\n" + 272 "q\n" +
255 - cm + " cm\n" +  
256 - QUtil::double_to_string(rect.llx, 5) + " " +  
257 - QUtil::double_to_string(rect.lly, 5) + " " +  
258 - QUtil::double_to_string(rect.urx - rect.llx, 5) + " " +  
259 - QUtil::double_to_string(rect.ury - rect.lly, 5) + " " +  
260 - "re W n\n");  
261 - PointerHolder<Buffer> buf = as.getStreamData(qpdf_dl_all);  
262 - as_content += std::string(  
263 - reinterpret_cast<char *>(buf->getBuffer()),  
264 - buf->getSize());  
265 - as_content += "\nQ\n";  
266 - return as_content; 273 + AA.unparse() + " cm\n" +
  274 + name + " Do\n" +
  275 + "Q\n");
267 } 276 }
libqpdf/QPDFObjectHandle.cc
@@ -826,23 +826,8 @@ QPDFObjectHandle::isOrHasName(std::string const&amp; value) @@ -826,23 +826,8 @@ QPDFObjectHandle::isOrHasName(std::string const&amp; value)
826 } 826 }
827 827
828 void 828 void
829 -QPDFObjectHandle::mergeDictionary(QPDFObjectHandle other) 829 +QPDFObjectHandle::mergeResources(QPDFObjectHandle other)
830 { 830 {
831 - std::set<QPDFObjGen> visiting;  
832 - mergeDictionaryInternal(other, visiting, 0);  
833 -}  
834 -  
835 -void  
836 -QPDFObjectHandle::mergeDictionaryInternal(  
837 - QPDFObjectHandle other,  
838 - std::set<QPDFObjGen>& visiting,  
839 - int depth)  
840 -{  
841 - if (depth > 100)  
842 - {  
843 - // Arbitrarily limit depth to avoid stack overflow  
844 - return;  
845 - }  
846 if (! (isDictionary() && other.isDictionary())) 831 if (! (isDictionary() && other.isDictionary()))
847 { 832 {
848 QTC::TC("qpdf", "QPDFObjectHandle merge top type mismatch"); 833 QTC::TC("qpdf", "QPDFObjectHandle merge top type mismatch");
@@ -859,33 +844,22 @@ QPDFObjectHandle::mergeDictionaryInternal( @@ -859,33 +844,22 @@ QPDFObjectHandle::mergeDictionaryInternal(
859 QPDFObjectHandle this_val = getKey(key); 844 QPDFObjectHandle this_val = getKey(key);
860 if (this_val.isDictionary() && other_val.isDictionary()) 845 if (this_val.isDictionary() && other_val.isDictionary())
861 { 846 {
862 - if (this_val.isIndirect() && other_val.isIndirect() &&  
863 - (this_val.getObjGen() == other_val.getObjGen())) 847 + if (this_val.isIndirect())
864 { 848 {
865 - QTC::TC("qpdf", "QPDFObjectHandle merge equal indirect"); 849 + QTC::TC("qpdf", "QPDFObjectHandle replace with copy");
  850 + this_val = this_val.shallowCopy();
  851 + replaceKey(key, this_val);
866 } 852 }
867 - else if (this_val.isIndirect() &&  
868 - (visiting.count(this_val.getObjGen()))) 853 + std::set<std::string> other_val_keys = other_val.getKeys();
  854 + for (std::set<std::string>::iterator i2 =
  855 + other_val_keys.begin();
  856 + i2 != other_val_keys.end(); ++i2)
869 { 857 {
870 - QTC::TC("qpdf", "QPDFObjectHandle merge loop");  
871 - }  
872 - else  
873 - {  
874 - QPDFObjGen loop;  
875 - if (this_val.isIndirect()) 858 + if (! this_val.hasKey(*i2))
876 { 859 {
877 - loop = this_val.getObjGen();  
878 - visiting.insert(loop);  
879 QTC::TC("qpdf", "QPDFObjectHandle merge shallow copy"); 860 QTC::TC("qpdf", "QPDFObjectHandle merge shallow copy");
880 - this_val = this_val.shallowCopy();  
881 - replaceKey(key, this_val);  
882 - }  
883 - QTC::TC("qpdf", "QPDFObjectHandle nested merge");  
884 - this_val.mergeDictionaryInternal(  
885 - other_val, visiting, 1 + depth);  
886 - if (loop.getObj())  
887 - {  
888 - visiting.erase(loop); 861 + this_val.replaceKey(
  862 + *i2, other_val.getKey(*i2).shallowCopy());
889 } 863 }
890 } 864 }
891 } 865 }
@@ -923,9 +897,37 @@ QPDFObjectHandle::mergeDictionaryInternal( @@ -923,9 +897,37 @@ QPDFObjectHandle::mergeDictionaryInternal(
923 else 897 else
924 { 898 {
925 QTC::TC("qpdf", "QPDFObjectHandle merge copy from other"); 899 QTC::TC("qpdf", "QPDFObjectHandle merge copy from other");
926 - replaceKey(key, other_val); 900 + replaceKey(key, other_val.shallowCopy());
  901 + }
  902 + }
  903 +}
  904 +
  905 +std::set<std::string>
  906 +QPDFObjectHandle::getResourceNames()
  907 +{
  908 + // Return second-level dictionary keys
  909 + std::set<std::string> result;
  910 + if (! isDictionary())
  911 + {
  912 + return result;
  913 + }
  914 + std::set<std::string> keys = getKeys();
  915 + for (std::set<std::string>::iterator iter = keys.begin();
  916 + iter != keys.end(); ++iter)
  917 + {
  918 + std::string const& key = *iter;
  919 + QPDFObjectHandle val = getKey(key);
  920 + if (val.isDictionary())
  921 + {
  922 + std::set<std::string> val_keys = val.getKeys();
  923 + for (std::set<std::string>::iterator i2 = val_keys.begin();
  924 + i2 != val_keys.end(); ++i2)
  925 + {
  926 + result.insert(*i2);
  927 + }
927 } 928 }
928 } 929 }
  930 + return result;
929 } 931 }
930 932
931 // Indirect object accessors 933 // Indirect object accessors
libqpdf/QPDFPageDocumentHelper.cc
1 #include <qpdf/QPDFPageDocumentHelper.hh> 1 #include <qpdf/QPDFPageDocumentHelper.hh>
2 #include <qpdf/QPDFAcroFormDocumentHelper.hh> 2 #include <qpdf/QPDFAcroFormDocumentHelper.hh>
  3 +#include <qpdf/QUtil.hh>
3 #include <qpdf/QTC.hh> 4 #include <qpdf/QTC.hh>
4 5
5 QPDFPageDocumentHelper::Members::~Members() 6 QPDFPageDocumentHelper::Members::~Members()
@@ -121,6 +122,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage( @@ -121,6 +122,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
121 { 122 {
122 rotate = rotate_obj.getIntValue(); 123 rotate = rotate_obj.getIntValue();
123 } 124 }
  125 + int next_fx = 1;
124 for (std::vector<QPDFAnnotationObjectHelper>::iterator iter = 126 for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
125 annots.begin(); 127 annots.begin();
126 iter != annots.end(); ++iter) 128 iter != annots.end(); ++iter)
@@ -140,18 +142,50 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage( @@ -140,18 +142,50 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
140 } 142 }
141 if (process) 143 if (process)
142 { 144 {
143 - resources.mergeDictionary(as.getDict().getKey("/Resources"));  
144 if (is_widget) 145 if (is_widget)
145 { 146 {
146 QTC::TC("qpdf", "QPDFPageDocumentHelper merge DR"); 147 QTC::TC("qpdf", "QPDFPageDocumentHelper merge DR");
147 QPDFFormFieldObjectHelper ff = afdh.getFieldForAnnotation(aoh); 148 QPDFFormFieldObjectHelper ff = afdh.getFieldForAnnotation(aoh);
148 - resources.mergeDictionary(ff.getInheritableFieldValue("/DR")); 149 + QPDFObjectHandle as_resources =
  150 + as.getDict().getKey("/Resources");
  151 + if (as_resources.isIndirect())
  152 + {
  153 + QTC::TC("qpdf", "QPDFPageDocumentHelper indirect as resources");
  154 + as.getDict().replaceKey(
  155 + "/Resources", as_resources.shallowCopy());
  156 + as_resources = as.getDict().getKey("/Resources");
  157 + }
  158 + as_resources.mergeResources(
  159 + ff.getInheritableFieldValue("/DR"));
149 } 160 }
150 else 161 else
151 { 162 {
152 QTC::TC("qpdf", "QPDFPageDocumentHelper non-widget annotation"); 163 QTC::TC("qpdf", "QPDFPageDocumentHelper non-widget annotation");
153 } 164 }
154 - new_content += aoh.getPageContentForAppearance(rotate); 165 + std::set<std::string> names = resources.getResourceNames();
  166 + std::string name;
  167 + while (next_fx < 1000000)
  168 + {
  169 + std::string candidate = "/Fxo" + QUtil::int_to_string(next_fx);
  170 + ++next_fx;
  171 + if (names.count(candidate) == 0)
  172 + {
  173 + name = candidate;
  174 + break;
  175 + }
  176 + }
  177 + if (name.empty())
  178 + {
  179 + // There are already more than a million /Fxo names.
  180 + // Somehow I doubt this is going to actually happen.
  181 + // Just pick a name and forget conflicts.
  182 + name = "/FxConflict";
  183 + }
  184 + resources.mergeResources(
  185 + QPDFObjectHandle::parse(
  186 + "<< /XObject << " + name + " null >> >>"));
  187 + resources.getKey("/XObject").replaceKey(name, as);
  188 + new_content += aoh.getPageContentForAppearance(name, rotate);
155 } 189 }
156 else 190 else
157 { 191 {
qpdf/qpdf.testcov
@@ -371,12 +371,9 @@ qpdf required parameter 0 @@ -371,12 +371,9 @@ qpdf required parameter 0
371 qpdf required choices 0 371 qpdf required choices 0
372 QPDFObjectHandle merge top type mismatch 0 372 QPDFObjectHandle merge top type mismatch 0
373 QPDFObjectHandle merge shallow copy 0 373 QPDFObjectHandle merge shallow copy 0
374 -QPDFObjectHandle nested merge 0  
375 QPDFObjectHandle merge array 0 374 QPDFObjectHandle merge array 0
376 QPDFObjectHandle merge array dup 0 375 QPDFObjectHandle merge array dup 0
377 QPDFObjectHandle merge copy from other 0 376 QPDFObjectHandle merge copy from other 0
378 -QPDFObjectHandle merge loop 0  
379 -QPDFObjectHandle merge equal indirect 0  
380 QPDFAnnotationObjectHelper explicit matrix 0 377 QPDFAnnotationObjectHelper explicit matrix 0
381 QPDFAnnotationObjectHelper default matrix 0 378 QPDFAnnotationObjectHelper default matrix 0
382 QPDFAnnotationObjectHelper rotate 90 0 379 QPDFAnnotationObjectHelper rotate 90 0
@@ -389,3 +386,5 @@ QPDFPageDocumentHelper non-widget annotation 0 @@ -389,3 +386,5 @@ QPDFPageDocumentHelper non-widget annotation 0
389 QPDFPageDocumentHelper remove annots 0 386 QPDFPageDocumentHelper remove annots 0
390 QPDFPageDocumentHelper replace indirect annots 0 387 QPDFPageDocumentHelper replace indirect annots 0
391 QPDFPageDocumentHelper replace direct annots 0 388 QPDFPageDocumentHelper replace direct annots 0
  389 +QPDFObjectHandle replace with copy 0
  390 +QPDFPageDocumentHelper indirect as resources 0
qpdf/qtest/qpdf/comment-annotation-direct-out.pdf
@@ -38,19 +38,13 @@ endobj @@ -38,19 +38,13 @@ endobj
38 ] 38 ]
39 /Parent 2 0 R 39 /Parent 2 0 R
40 /Resources << 40 /Resources <<
41 - /ExtGState <<  
42 - /GS0 <<  
43 - /AIS false  
44 - /BM /Normal  
45 - /CA .6  
46 - /Type /ExtGState  
47 - /ca .6  
48 - >>  
49 - >>  
50 /Font << 41 /Font <<
51 /F1 11 0 R 42 /F1 11 0 R
52 >> 43 >>
53 /ProcSet 12 0 R 44 /ProcSet 12 0 R
  45 + /XObject <<
  46 + /Fxo1 13 0 R
  47 + >>
54 >> 48 >>
55 /Type /Page 49 /Type /Page
56 >> 50 >>
@@ -60,7 +54,7 @@ endobj @@ -60,7 +54,7 @@ endobj
60 << 54 <<
61 /F 28 55 /F 28
62 /Open false 56 /Open false
63 - /Parent 13 0 R 57 + /Parent 15 0 R
64 /Rect [ 58 /Rect [
65 612 59 612
66 601 60 601
@@ -114,14 +108,13 @@ stream @@ -114,14 +108,13 @@ stream
114 Q 108 Q
115 q 109 q
116 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm 110 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
117 -0.00000 0.00000 18.00000 18.00000 re W n  
118 -q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b 111 +/Fxo1 Do
119 Q 112 Q
120 endstream 113 endstream
121 endobj 114 endobj
122 115
123 10 0 obj 116 10 0 obj
124 -1032 117 +71
125 endobj 118 endobj
126 119
127 11 0 obj 120 11 0 obj
@@ -143,36 +136,6 @@ endobj @@ -143,36 +136,6 @@ endobj
143 136
144 13 0 obj 137 13 0 obj
145 << 138 <<
146 - /AP <<  
147 - /N 14 0 R  
148 - >>  
149 - /C [  
150 - 1  
151 - 1  
152 - 0  
153 - ]  
154 - /CA 1  
155 - /Contents (Salad)  
156 - /CreationDate (D:20181231235455Z00'00)  
157 - /F 28  
158 - /M (D:20181231235455Z00'00)  
159 - /Name /Comment  
160 - /P 3 0 R  
161 - /Popup 4 0 R  
162 - /Rect [  
163 - 235  
164 - 703  
165 - 253  
166 - 721  
167 - ]  
168 - /Subtype /Text  
169 - /T (Jay Berkenbilt)  
170 - /Type /Annot  
171 ->>  
172 -endobj  
173 -  
174 -14 0 obj  
175 -<<  
176 /BBox [ 139 /BBox [
177 0 140 0
178 0 141 0
@@ -192,7 +155,7 @@ endobj @@ -192,7 +155,7 @@ endobj
192 >> 155 >>
193 /Subtype /Form 156 /Subtype /Form
194 /Type /XObject 157 /Type /XObject
195 - /Length 15 0 R 158 + /Length 14 0 R
196 >> 159 >>
197 stream 160 stream
198 q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b 161 q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
@@ -200,33 +163,63 @@ endstream @@ -200,33 +163,63 @@ endstream
200 endobj 163 endobj
201 164
202 %QDF: ignore_newline 165 %QDF: ignore_newline
203 -15 0 obj 166 +14 0 obj
204 928 167 928
205 endobj 168 endobj
206 169
  170 +15 0 obj
  171 +<<
  172 + /AP <<
  173 + /N 13 0 R
  174 + >>
  175 + /C [
  176 + 1
  177 + 1
  178 + 0
  179 + ]
  180 + /CA 1
  181 + /Contents (Salad)
  182 + /CreationDate (D:20181231235455Z00'00)
  183 + /F 28
  184 + /M (D:20181231235455Z00'00)
  185 + /Name /Comment
  186 + /P 3 0 R
  187 + /Popup 4 0 R
  188 + /Rect [
  189 + 235
  190 + 703
  191 + 253
  192 + 721
  193 + ]
  194 + /Subtype /Text
  195 + /T (Jay Berkenbilt)
  196 + /Type /Annot
  197 +>>
  198 +endobj
  199 +
207 xref 200 xref
208 0 16 201 0 16
209 0000000000 65535 f 202 0000000000 65535 f
210 0000000025 00000 n 203 0000000025 00000 n
211 0000000079 00000 n 204 0000000079 00000 n
212 0000000161 00000 n 205 0000000161 00000 n
213 -0000000553 00000 n  
214 -0000000716 00000 n  
215 -0000000773 00000 n  
216 -0000000814 00000 n  
217 -0000000913 00000 n  
218 -0000000955 00000 n  
219 -0000002043 00000 n  
220 -0000002065 00000 n  
221 -0000002184 00000 n  
222 -0000002220 00000 n  
223 -0000002550 00000 n  
224 -0000003794 00000 n 206 +0000000453 00000 n
  207 +0000000616 00000 n
  208 +0000000673 00000 n
  209 +0000000714 00000 n
  210 +0000000813 00000 n
  211 +0000000855 00000 n
  212 +0000000982 00000 n
  213 +0000001002 00000 n
  214 +0000001121 00000 n
  215 +0000001157 00000 n
  216 +0000002401 00000 n
  217 +0000002422 00000 n
225 trailer << 218 trailer <<
226 /Root 1 0 R 219 /Root 1 0 R
227 /Size 16 220 /Size 16
228 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] 221 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
229 >> 222 >>
230 startxref 223 startxref
231 -3815 224 +2752
232 %%EOF 225 %%EOF
qpdf/qtest/qpdf/comment-annotation-out.pdf
@@ -36,19 +36,13 @@ endobj @@ -36,19 +36,13 @@ endobj
36 ] 36 ]
37 /Parent 2 0 R 37 /Parent 2 0 R
38 /Resources << 38 /Resources <<
39 - /ExtGState <<  
40 - /GS0 <<  
41 - /AIS false  
42 - /BM /Normal  
43 - /CA .6  
44 - /Type /ExtGState  
45 - /ca .6  
46 - >>  
47 - >>  
48 /Font << 39 /Font <<
49 /F1 11 0 R 40 /F1 11 0 R
50 >> 41 >>
51 /ProcSet 12 0 R 42 /ProcSet 12 0 R
  43 + /XObject <<
  44 + /Fxo1 13 0 R
  45 + >>
52 >> 46 >>
53 /Type /Page 47 /Type /Page
54 >> 48 >>
@@ -56,7 +50,7 @@ endobj @@ -56,7 +50,7 @@ endobj
56 50
57 4 0 obj 51 4 0 obj
58 [ 52 [
59 - 13 0 R 53 + 15 0 R
60 ] 54 ]
61 endobj 55 endobj
62 56
@@ -102,14 +96,13 @@ stream @@ -102,14 +96,13 @@ stream
102 Q 96 Q
103 q 97 q
104 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm 98 1.00000 0.00000 0.00000 1.00000 235.00000 703.00000 cm
105 -0.00000 0.00000 18.00000 18.00000 re W n  
106 -q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b 99 +/Fxo1 Do
107 Q 100 Q
108 endstream 101 endstream
109 endobj 102 endobj
110 103
111 10 0 obj 104 10 0 obj
112 -1032 105 +71
113 endobj 106 endobj
114 107
115 11 0 obj 108 11 0 obj
@@ -131,9 +124,42 @@ endobj @@ -131,9 +124,42 @@ endobj
131 124
132 13 0 obj 125 13 0 obj
133 << 126 <<
  127 + /BBox [
  128 + 0
  129 + 0
  130 + 18
  131 + 18
  132 + ]
  133 + /Resources <<
  134 + /ExtGState <<
  135 + /GS0 <<
  136 + /AIS false
  137 + /BM /Normal
  138 + /CA .6
  139 + /Type /ExtGState
  140 + /ca .6
  141 + >>
  142 + >>
  143 + >>
  144 + /Subtype /Form
  145 + /Type /XObject
  146 + /Length 14 0 R
  147 +>>
  148 +stream
  149 +q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b
  150 +endstream
  151 +endobj
  152 +
  153 +%QDF: ignore_newline
  154 +14 0 obj
  155 +928
  156 +endobj
  157 +
  158 +15 0 obj
  159 +<<
134 /F 28 160 /F 28
135 /Open false 161 /Open false
136 - /Parent 14 0 R 162 + /Parent 16 0 R
137 /Rect [ 163 /Rect [
138 612 164 612
139 601 165 601
@@ -145,10 +171,10 @@ endobj @@ -145,10 +171,10 @@ endobj
145 >> 171 >>
146 endobj 172 endobj
147 173
148 -14 0 obj 174 +16 0 obj
149 << 175 <<
150 /AP << 176 /AP <<
151 - /N 15 0 R 177 + /N 13 0 R
152 >> 178 >>
153 /C [ 179 /C [
154 1 180 1
@@ -162,7 +188,7 @@ endobj @@ -162,7 +188,7 @@ endobj
162 /M (D:20181231235455Z00'00) 188 /M (D:20181231235455Z00'00)
163 /Name /Comment 189 /Name /Comment
164 /P 3 0 R 190 /P 3 0 R
165 - /Popup 13 0 R 191 + /Popup 15 0 R
166 /Rect [ 192 /Rect [
167 235 193 235
168 703 194 703
@@ -175,63 +201,30 @@ endobj @@ -175,63 +201,30 @@ endobj
175 >> 201 >>
176 endobj 202 endobj
177 203
178 -15 0 obj  
179 -<<  
180 - /BBox [  
181 - 0  
182 - 0  
183 - 18  
184 - 18  
185 - ]  
186 - /Resources <<  
187 - /ExtGState <<  
188 - /GS0 <<  
189 - /AIS false  
190 - /BM /Normal  
191 - /CA .6  
192 - /Type /ExtGState  
193 - /ca .6  
194 - >>  
195 - >>  
196 - >>  
197 - /Subtype /Form  
198 - /Type /XObject  
199 - /Length 16 0 R  
200 ->>  
201 -stream  
202 -q 1 1 1 rg 0 i 1 w 4 M 1 j 0 J []0 d /GS0 gs 1 0 0 1 9 5.0908 cm 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c h f Q 0 G 1 1 0 rg 0 i 0.60 w 4 M 1 j 0 J []0 d 1 1 0 rg 0 G 0 i 0.59 w 4 M 1 j 0 J []0 d 1 0 0 1 9 5.0908 cm 0 0 m -0.142 0 -0.28 0.008 -0.418 0.015 c -2.199 -1.969 -5.555 -2.242 -4.642 -1.42 c -4.024 -0.862 -3.916 0.111 -3.954 0.916 c -5.658 1.795 -6.772 3.222 -6.772 4.839 c -6.772 7.509 -3.74 9.674 0 9.674 c 3.74 9.674 6.772 7.509 6.772 4.839 c 6.772 2.167 3.74 0 0 0 c 7.74 12.616 m -7.74 12.616 l -8.274 12.616 -8.707 12.184 -8.707 11.649 c -8.707 -3.831 l -8.707 -4.365 -8.274 -4.798 -7.74 -4.798 c 7.74 -4.798 l 8.274 -4.798 8.707 -4.365 8.707 -3.831 c 8.707 11.649 l 8.707 12.184 8.274 12.616 7.74 12.616 c b  
203 -endstream  
204 -endobj  
205 -  
206 -%QDF: ignore_newline  
207 -16 0 obj  
208 -928  
209 -endobj  
210 -  
211 xref 204 xref
212 0 17 205 0 17
213 0000000000 65535 f 206 0000000000 65535 f
214 0000000025 00000 n 207 0000000025 00000 n
215 0000000079 00000 n 208 0000000079 00000 n
216 0000000161 00000 n 209 0000000161 00000 n
217 -0000000543 00000 n  
218 -0000000595 00000 n  
219 -0000000652 00000 n  
220 -0000000693 00000 n  
221 -0000000792 00000 n  
222 -0000000834 00000 n  
223 -0000001922 00000 n  
224 -0000001944 00000 n  
225 -0000002063 00000 n  
226 -0000002099 00000 n  
227 -0000002240 00000 n  
228 -0000002571 00000 n  
229 -0000003815 00000 n 210 +0000000443 00000 n
  211 +0000000495 00000 n
  212 +0000000552 00000 n
  213 +0000000593 00000 n
  214 +0000000692 00000 n
  215 +0000000734 00000 n
  216 +0000000861 00000 n
  217 +0000000881 00000 n
  218 +0000001000 00000 n
  219 +0000001036 00000 n
  220 +0000002280 00000 n
  221 +0000002301 00000 n
  222 +0000002442 00000 n
230 trailer << 223 trailer <<
231 /Root 1 0 R 224 /Root 1 0 R
232 /Size 17 225 /Size 17
233 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>] 226 /ID [<c5b1999a07a3fdcd0c04cfeed299c25a><31415926535897932384626433832795>]
234 >> 227 >>
235 startxref 228 startxref
236 -3836 229 +2773
237 %%EOF 230 %%EOF
qpdf/qtest/qpdf/form-field-types-out.pdf
No preview for this file type
qpdf/qtest/qpdf/form-filled-by-acrobat-out.pdf
No preview for this file type
qpdf/qtest/qpdf/manual-appearances-out.pdf
@@ -55,6 +55,11 @@ endobj @@ -55,6 +55,11 @@ endobj
55 /PDF 55 /PDF
56 /Text 56 /Text
57 ] 57 ]
  58 + /XObject <<
  59 + /Fxo1 13 0 R
  60 + /Fxo2 15 0 R
  61 + /Fxo3 17 0 R
  62 + >>
58 >> 63 >>
59 /StructParents 0 64 /StructParents 0
60 /Type /Page 65 /Type /Page
@@ -66,14 +71,14 @@ endobj @@ -66,14 +71,14 @@ endobj
66 /Count 9 71 /Count 9
67 /Kids [ 72 /Kids [
68 3 0 R 73 3 0 R
69 - 13 0 R  
70 - 14 0 R  
71 - 15 0 R  
72 - 16 0 R  
73 - 17 0 R  
74 - 18 0 R  
75 19 0 R 74 19 0 R
76 20 0 R 75 20 0 R
  76 + 21 0 R
  77 + 22 0 R
  78 + 23 0 R
  79 + 24 0 R
  80 + 25 0 R
  81 + 26 0 R
77 ] 82 ]
78 /Type /Pages 83 /Type /Pages
79 >> 84 >>
@@ -82,9 +87,9 @@ endobj @@ -82,9 +87,9 @@ endobj
82 5 0 obj 87 5 0 obj
83 << 88 <<
84 /K [ 89 /K [
85 - 21 0 R 90 + 27 0 R
86 ] 91 ]
87 - /ParentTree 22 0 R 92 + /ParentTree 28 0 R
88 /RoleMap << 93 /RoleMap <<
89 /Document /Document 94 /Document /Document
90 /Standard /P 95 /Standard /P
@@ -148,7 +153,49 @@ stream @@ -148,7 +153,49 @@ stream
148 Q 153 Q
149 q 154 q
150 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 155 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
151 -0.00000 0.00000 67.30000 50.95000 re W n 156 +/Fxo1 Do
  157 +Q
  158 +q
  159 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  160 +/Fxo2 Do
  161 +Q
  162 +q
  163 +1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm
  164 +/Fxo3 Do
  165 +Q
  166 +endstream
  167 +endobj
  168 +
  169 +11 0 obj
  170 +207
  171 +endobj
  172 +
  173 +12 0 obj
  174 +<<
  175 +>>
  176 +endobj
  177 +
  178 +13 0 obj
  179 +<<
  180 + /BBox [
  181 + 0
  182 + 0
  183 + 67.3
  184 + 50.95
  185 + ]
  186 + /Resources <<
  187 + /Font <<
  188 + >>
  189 + /ProcSet [
  190 + /PDF
  191 + /Text
  192 + ]
  193 + >>
  194 + /Subtype /Form
  195 + /Type /XObject
  196 + /Length 14 0 R
  197 +>>
  198 +stream
152 q 199 q
153 60 r 200 60 r
154 1 0 0 RG 201 1 0 0 RG
@@ -157,23 +204,76 @@ q @@ -157,23 +204,76 @@ q
157 0 1 0 RG 204 0 1 0 RG
158 5 5 15 15 re s 205 5 5 15 15 re s
159 Q 206 Q
  207 +endstream
  208 +endobj
160 209
161 -Q  
162 -q  
163 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
164 -0.00000 0.00000 103.45000 53.00000 re W n 210 +14 0 obj
  211 +66
  212 +endobj
  213 +
  214 +15 0 obj
  215 +<<
  216 + /BBox [
  217 + 0
  218 + 0
  219 + 103.45
  220 + 53
  221 + ]
  222 + /Resources <<
  223 + /Font <<
  224 + >>
  225 + /ProcSet [
  226 + /PDF
  227 + /Text
  228 + ]
  229 + >>
  230 + /Subtype /Form
  231 + /Type /XObject
  232 + /Length 16 0 R
  233 +>>
  234 +stream
165 q 235 q
166 0 1 0 RG 236 0 1 0 RG
167 5 w 237 5 w
168 0 0 103.45 53 re s 238 0 0 103.45 53 re s
169 0 0 1 RG 239 0 0 1 RG
170 5 5 15 15 re s 240 5 5 15 15 re s
  241 +1 w
  242 +1 0 0 RG
  243 +-10 25 m
  244 +113.45 25 l
  245 +52 -10 m
  246 +52 63 l
  247 +s
171 Q 248 Q
  249 +endstream
  250 +endobj
172 251
173 -Q  
174 -q  
175 -1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm  
176 -0.00000 0.00000 72.80000 98.00000 re W n 252 +16 0 obj
  253 +113
  254 +endobj
  255 +
  256 +17 0 obj
  257 +<<
  258 + /BBox [
  259 + 0
  260 + 0
  261 + 72.8
  262 + 98
  263 + ]
  264 + /Resources <<
  265 + /Font <<
  266 + >>
  267 + /ProcSet [
  268 + /PDF
  269 + /Text
  270 + ]
  271 + >>
  272 + /Subtype /Form
  273 + /Type /XObject
  274 + /Length 18 0 R
  275 +>>
  276 +stream
177 q 277 q
178 0 0 1 RG 278 0 0 1 RG
179 5 w 279 5 w
@@ -181,27 +281,20 @@ q @@ -181,27 +281,20 @@ q
181 1 0 0 RG 281 1 0 0 RG
182 5 5 15 15 re s 282 5 5 15 15 re s
183 Q 283 Q
184 -  
185 -Q  
186 endstream 284 endstream
187 endobj 285 endobj
188 286
189 -11 0 obj  
190 -491  
191 -endobj  
192 -  
193 -12 0 obj  
194 -<<  
195 ->> 287 +18 0 obj
  288 +58
196 endobj 289 endobj
197 290
198 %% Page 2 291 %% Page 2
199 -13 0 obj 292 +19 0 obj
200 << 293 <<
201 /Contents [ 294 /Contents [
202 - 23 0 R  
203 - 25 0 R  
204 - 27 0 R 295 + 29 0 R
  296 + 31 0 R
  297 + 33 0 R
205 ] 298 ]
206 /Group << 299 /Group <<
207 /CS /DeviceRGB 300 /CS /DeviceRGB
@@ -216,11 +309,16 @@ endobj @@ -216,11 +309,16 @@ endobj
216 ] 309 ]
217 /Parent 4 0 R 310 /Parent 4 0 R
218 /Resources << 311 /Resources <<
219 - /Font 29 0 R 312 + /Font 35 0 R
220 /ProcSet [ 313 /ProcSet [
221 /PDF 314 /PDF
222 /Text 315 /Text
223 ] 316 ]
  317 + /XObject <<
  318 + /Fxo1 36 0 R
  319 + /Fxo2 38 0 R
  320 + /Fxo3 40 0 R
  321 + >>
224 >> 322 >>
225 /Rotate 90 323 /Rotate 90
226 /StructParents 0 324 /StructParents 0
@@ -229,12 +327,12 @@ endobj @@ -229,12 +327,12 @@ endobj
229 endobj 327 endobj
230 328
231 %% Page 3 329 %% Page 3
232 -14 0 obj 330 +20 0 obj
233 << 331 <<
234 /Contents [ 332 /Contents [
235 - 30 0 R  
236 - 32 0 R  
237 - 34 0 R 333 + 42 0 R
  334 + 44 0 R
  335 + 46 0 R
238 ] 336 ]
239 /Group << 337 /Group <<
240 /CS /DeviceRGB 338 /CS /DeviceRGB
@@ -249,11 +347,16 @@ endobj @@ -249,11 +347,16 @@ endobj
249 ] 347 ]
250 /Parent 4 0 R 348 /Parent 4 0 R
251 /Resources << 349 /Resources <<
252 - /Font 36 0 R 350 + /Font 48 0 R
253 /ProcSet [ 351 /ProcSet [
254 /PDF 352 /PDF
255 /Text 353 /Text
256 ] 354 ]
  355 + /XObject <<
  356 + /Fxo1 49 0 R
  357 + /Fxo2 51 0 R
  358 + /Fxo3 53 0 R
  359 + >>
257 >> 360 >>
258 /StructParents 0 361 /StructParents 0
259 /Type /Page 362 /Type /Page
@@ -261,12 +364,12 @@ endobj @@ -261,12 +364,12 @@ endobj
261 endobj 364 endobj
262 365
263 %% Page 4 366 %% Page 4
264 -15 0 obj 367 +21 0 obj
265 << 368 <<
266 /Contents [ 369 /Contents [
267 - 37 0 R  
268 - 39 0 R  
269 - 41 0 R 370 + 55 0 R
  371 + 57 0 R
  372 + 59 0 R
270 ] 373 ]
271 /Group << 374 /Group <<
272 /CS /DeviceRGB 375 /CS /DeviceRGB
@@ -281,11 +384,16 @@ endobj @@ -281,11 +384,16 @@ endobj
281 ] 384 ]
282 /Parent 4 0 R 385 /Parent 4 0 R
283 /Resources << 386 /Resources <<
284 - /Font 43 0 R 387 + /Font 61 0 R
285 /ProcSet [ 388 /ProcSet [
286 /PDF 389 /PDF
287 /Text 390 /Text
288 ] 391 ]
  392 + /XObject <<
  393 + /Fxo1 62 0 R
  394 + /Fxo2 64 0 R
  395 + /Fxo3 66 0 R
  396 + >>
289 >> 397 >>
290 /Rotate 90 398 /Rotate 90
291 /StructParents 0 399 /StructParents 0
@@ -294,12 +402,12 @@ endobj @@ -294,12 +402,12 @@ endobj
294 endobj 402 endobj
295 403
296 %% Page 5 404 %% Page 5
297 -16 0 obj 405 +22 0 obj
298 << 406 <<
299 /Contents [ 407 /Contents [
300 - 44 0 R  
301 - 46 0 R  
302 - 48 0 R 408 + 68 0 R
  409 + 70 0 R
  410 + 72 0 R
303 ] 411 ]
304 /Group << 412 /Group <<
305 /CS /DeviceRGB 413 /CS /DeviceRGB
@@ -314,11 +422,16 @@ endobj @@ -314,11 +422,16 @@ endobj
314 ] 422 ]
315 /Parent 4 0 R 423 /Parent 4 0 R
316 /Resources << 424 /Resources <<
317 - /Font 50 0 R 425 + /Font 74 0 R
318 /ProcSet [ 426 /ProcSet [
319 /PDF 427 /PDF
320 /Text 428 /Text
321 ] 429 ]
  430 + /XObject <<
  431 + /Fxo1 75 0 R
  432 + /Fxo2 77 0 R
  433 + /Fxo3 79 0 R
  434 + >>
322 >> 435 >>
323 /Rotate 180 436 /Rotate 180
324 /StructParents 0 437 /StructParents 0
@@ -327,12 +440,12 @@ endobj @@ -327,12 +440,12 @@ endobj
327 endobj 440 endobj
328 441
329 %% Page 6 442 %% Page 6
330 -17 0 obj 443 +23 0 obj
331 << 444 <<
332 /Contents [ 445 /Contents [
333 - 51 0 R  
334 - 53 0 R  
335 - 55 0 R 446 + 81 0 R
  447 + 83 0 R
  448 + 85 0 R
336 ] 449 ]
337 /Group << 450 /Group <<
338 /CS /DeviceRGB 451 /CS /DeviceRGB
@@ -347,11 +460,16 @@ endobj @@ -347,11 +460,16 @@ endobj
347 ] 460 ]
348 /Parent 4 0 R 461 /Parent 4 0 R
349 /Resources << 462 /Resources <<
350 - /Font 57 0 R 463 + /Font 87 0 R
351 /ProcSet [ 464 /ProcSet [
352 /PDF 465 /PDF
353 /Text 466 /Text
354 ] 467 ]
  468 + /XObject <<
  469 + /Fxo1 88 0 R
  470 + /Fxo2 90 0 R
  471 + /Fxo3 92 0 R
  472 + >>
355 >> 473 >>
356 /Rotate 90 474 /Rotate 90
357 /StructParents 0 475 /StructParents 0
@@ -360,12 +478,12 @@ endobj @@ -360,12 +478,12 @@ endobj
360 endobj 478 endobj
361 479
362 %% Page 7 480 %% Page 7
363 -18 0 obj 481 +24 0 obj
364 << 482 <<
365 /Contents [ 483 /Contents [
366 - 58 0 R  
367 - 60 0 R  
368 - 62 0 R 484 + 94 0 R
  485 + 96 0 R
  486 + 98 0 R
369 ] 487 ]
370 /Group << 488 /Group <<
371 /CS /DeviceRGB 489 /CS /DeviceRGB
@@ -380,11 +498,16 @@ endobj @@ -380,11 +498,16 @@ endobj
380 ] 498 ]
381 /Parent 4 0 R 499 /Parent 4 0 R
382 /Resources << 500 /Resources <<
383 - /Font 64 0 R 501 + /Font 100 0 R
384 /ProcSet [ 502 /ProcSet [
385 /PDF 503 /PDF
386 /Text 504 /Text
387 ] 505 ]
  506 + /XObject <<
  507 + /Fxo1 101 0 R
  508 + /Fxo2 103 0 R
  509 + /Fxo3 105 0 R
  510 + >>
388 >> 511 >>
389 /StructParents 0 512 /StructParents 0
390 /Type /Page 513 /Type /Page
@@ -392,12 +515,12 @@ endobj @@ -392,12 +515,12 @@ endobj
392 endobj 515 endobj
393 516
394 %% Page 8 517 %% Page 8
395 -19 0 obj 518 +25 0 obj
396 << 519 <<
397 /Contents [ 520 /Contents [
398 - 65 0 R  
399 - 67 0 R  
400 - 69 0 R 521 + 107 0 R
  522 + 109 0 R
  523 + 111 0 R
401 ] 524 ]
402 /Group << 525 /Group <<
403 /CS /DeviceRGB 526 /CS /DeviceRGB
@@ -412,11 +535,16 @@ endobj @@ -412,11 +535,16 @@ endobj
412 ] 535 ]
413 /Parent 4 0 R 536 /Parent 4 0 R
414 /Resources << 537 /Resources <<
415 - /Font 71 0 R 538 + /Font 113 0 R
416 /ProcSet [ 539 /ProcSet [
417 /PDF 540 /PDF
418 /Text 541 /Text
419 ] 542 ]
  543 + /XObject <<
  544 + /Fxo1 114 0 R
  545 + /Fxo2 116 0 R
  546 + /Fxo3 118 0 R
  547 + >>
420 >> 548 >>
421 /Rotate 270 549 /Rotate 270
422 /StructParents 0 550 /StructParents 0
@@ -425,12 +553,12 @@ endobj @@ -425,12 +553,12 @@ endobj
425 endobj 553 endobj
426 554
427 %% Page 9 555 %% Page 9
428 -20 0 obj 556 +26 0 obj
429 << 557 <<
430 /Contents [ 558 /Contents [
431 - 72 0 R  
432 - 74 0 R  
433 - 76 0 R 559 + 120 0 R
  560 + 122 0 R
  561 + 124 0 R
434 ] 562 ]
435 /Group << 563 /Group <<
436 /CS /DeviceRGB 564 /CS /DeviceRGB
@@ -445,24 +573,29 @@ endobj @@ -445,24 +573,29 @@ endobj
445 ] 573 ]
446 /Parent 4 0 R 574 /Parent 4 0 R
447 /Resources << 575 /Resources <<
448 - /Font 78 0 R 576 + /Font 126 0 R
449 /ProcSet [ 577 /ProcSet [
450 /PDF 578 /PDF
451 /Text 579 /Text
452 ] 580 ]
  581 + /XObject <<
  582 + /Fxo1 127 0 R
  583 + /Fxo2 129 0 R
  584 + /Fxo3 131 0 R
  585 + >>
453 >> 586 >>
454 /StructParents 0 587 /StructParents 0
455 /Type /Page 588 /Type /Page
456 >> 589 >>
457 endobj 590 endobj
458 591
459 -21 0 obj 592 +27 0 obj
460 << 593 <<
461 /K [ 594 /K [
462 - 79 0 R  
463 - 80 0 R  
464 - 81 0 R  
465 - 82 0 R 595 + 133 0 R
  596 + 134 0 R
  597 + 135 0 R
  598 + 136 0 R
466 ] 599 ]
467 /P 5 0 R 600 /P 5 0 R
468 /Pg 3 0 R 601 /Pg 3 0 R
@@ -471,37 +604,37 @@ endobj @@ -471,37 +604,37 @@ endobj
471 >> 604 >>
472 endobj 605 endobj
473 606
474 -22 0 obj 607 +28 0 obj
475 << 608 <<
476 /Nums [ 609 /Nums [
477 0 610 0
478 [ 611 [
479 - 80 0 R  
480 - 81 0 R  
481 - 82 0 R 612 + 134 0 R
  613 + 135 0 R
  614 + 136 0 R
482 ] 615 ]
483 ] 616 ]
484 >> 617 >>
485 endobj 618 endobj
486 619
487 %% Contents for page 2 620 %% Contents for page 2
488 -23 0 obj 621 +29 0 obj
489 << 622 <<
490 - /Length 24 0 R 623 + /Length 30 0 R
491 >> 624 >>
492 stream 625 stream
493 q 626 q
494 endstream 627 endstream
495 endobj 628 endobj
496 629
497 -24 0 obj 630 +30 0 obj
498 2 631 2
499 endobj 632 endobj
500 633
501 %% Contents for page 2 634 %% Contents for page 2
502 -25 0 obj 635 +31 0 obj
503 << 636 <<
504 - /Length 26 0 R 637 + /Length 32 0 R
505 >> 638 >>
506 stream 639 stream
507 0.1 w 640 0.1 w
@@ -525,21 +658,63 @@ endstream @@ -525,21 +658,63 @@ endstream
525 endobj 658 endobj
526 659
527 %QDF: ignore_newline 660 %QDF: ignore_newline
528 -26 0 obj 661 +32 0 obj
529 240 662 240
530 endobj 663 endobj
531 664
532 %% Contents for page 2 665 %% Contents for page 2
533 -27 0 obj 666 +33 0 obj
534 << 667 <<
535 - /Length 28 0 R 668 + /Length 34 0 R
536 >> 669 >>
537 stream 670 stream
538 671
539 Q 672 Q
540 q 673 q
541 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 674 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
542 -0.00000 0.00000 67.30000 50.95000 re W n 675 +/Fxo1 Do
  676 +Q
  677 +q
  678 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  679 +/Fxo2 Do
  680 +Q
  681 +q
  682 +0.00000 1.00003 -0.99998 0.00000 392.14700 528.24900 cm
  683 +/Fxo3 Do
  684 +Q
  685 +endstream
  686 +endobj
  687 +
  688 +34 0 obj
  689 +208
  690 +endobj
  691 +
  692 +35 0 obj
  693 +<<
  694 +>>
  695 +endobj
  696 +
  697 +36 0 obj
  698 +<<
  699 + /BBox [
  700 + 0
  701 + 0
  702 + 67.3
  703 + 50.95
  704 + ]
  705 + /Resources <<
  706 + /Font <<
  707 + >>
  708 + /ProcSet [
  709 + /PDF
  710 + /Text
  711 + ]
  712 + >>
  713 + /Subtype /Form
  714 + /Type /XObject
  715 + /Length 37 0 R
  716 +>>
  717 +stream
543 q 718 q
544 1 0 0 RG 719 1 0 0 RG
545 5 w 720 5 w
@@ -547,23 +722,76 @@ q @@ -547,23 +722,76 @@ q
547 0 1 0 RG 722 0 1 0 RG
548 5 5 15 15 re s 723 5 5 15 15 re s
549 Q 724 Q
  725 +endstream
  726 +endobj
550 727
551 -Q  
552 -q  
553 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
554 -0.00000 0.00000 103.45000 53.00000 re W n 728 +37 0 obj
  729 +61
  730 +endobj
  731 +
  732 +38 0 obj
  733 +<<
  734 + /BBox [
  735 + 0
  736 + 0
  737 + 103.45
  738 + 53
  739 + ]
  740 + /Resources <<
  741 + /Font <<
  742 + >>
  743 + /ProcSet [
  744 + /PDF
  745 + /Text
  746 + ]
  747 + >>
  748 + /Subtype /Form
  749 + /Type /XObject
  750 + /Length 39 0 R
  751 +>>
  752 +stream
555 q 753 q
556 0 1 0 RG 754 0 1 0 RG
557 5 w 755 5 w
558 0 0 103.45 53 re s 756 0 0 103.45 53 re s
559 0 0 1 RG 757 0 0 1 RG
560 5 5 15 15 re s 758 5 5 15 15 re s
  759 +1 w
  760 +1 0 0 RG
  761 +-10 25 m
  762 +113.45 25 l
  763 +52 -10 m
  764 +52 63 l
  765 +s
561 Q 766 Q
  767 +endstream
  768 +endobj
562 769
563 -Q  
564 -q  
565 -0.00000 1.00003 -0.99998 0.00000 392.14700 528.24900 cm  
566 -0.00000 0.00000 72.80000 98.00000 re W n 770 +39 0 obj
  771 +113
  772 +endobj
  773 +
  774 +40 0 obj
  775 +<<
  776 + /BBox [
  777 + 0
  778 + 0
  779 + 72.8
  780 + 98
  781 + ]
  782 + /Resources <<
  783 + /Font <<
  784 + >>
  785 + /ProcSet [
  786 + /PDF
  787 + /Text
  788 + ]
  789 + >>
  790 + /Subtype /Form
  791 + /Type /XObject
  792 + /Length 41 0 R
  793 +>>
  794 +stream
567 q 795 q
568 0 0 1 RG 796 0 0 1 RG
569 5 w 797 5 w
@@ -571,38 +799,31 @@ q @@ -571,38 +799,31 @@ q
571 1 0 0 RG 799 1 0 0 RG
572 5 5 15 15 re s 800 5 5 15 15 re s
573 Q 801 Q
574 -  
575 -Q  
576 endstream 802 endstream
577 endobj 803 endobj
578 804
579 -28 0 obj  
580 -487  
581 -endobj  
582 -  
583 -29 0 obj  
584 -<<  
585 ->> 805 +41 0 obj
  806 +58
586 endobj 807 endobj
587 808
588 %% Contents for page 3 809 %% Contents for page 3
589 -30 0 obj 810 +42 0 obj
590 << 811 <<
591 - /Length 31 0 R 812 + /Length 43 0 R
592 >> 813 >>
593 stream 814 stream
594 q 815 q
595 endstream 816 endstream
596 endobj 817 endobj
597 818
598 -31 0 obj 819 +43 0 obj
599 2 820 2
600 endobj 821 endobj
601 822
602 %% Contents for page 3 823 %% Contents for page 3
603 -32 0 obj 824 +44 0 obj
604 << 825 <<
605 - /Length 33 0 R 826 + /Length 45 0 R
606 >> 827 >>
607 stream 828 stream
608 0.1 w 829 0.1 w
@@ -626,84 +847,188 @@ endstream @@ -626,84 +847,188 @@ endstream
626 endobj 847 endobj
627 848
628 %QDF: ignore_newline 849 %QDF: ignore_newline
629 -33 0 obj 850 +45 0 obj
630 240 851 240
631 endobj 852 endobj
632 853
633 %% Contents for page 3 854 %% Contents for page 3
634 -34 0 obj 855 +46 0 obj
635 << 856 <<
636 - /Length 35 0 R 857 + /Length 47 0 R
637 >> 858 >>
638 stream 859 stream
639 860
640 Q 861 Q
641 q 862 q
642 -0.65131 0.36563 -0.46062 0.51700 153.31752 651.15100 cm  
643 -0.00000 0.00000 67.30000 50.95000 re W n  
644 -q  
645 -1 0 0 RG  
646 -5 w  
647 -0 0 67.3 50.95 re s  
648 -0 1 0 RG  
649 -5 5 15 15 re s  
650 -Q  
651 - 863 +0.92124 0.00000 0.00000 0.73126 153.31752 651.15100 cm
  864 +/Fxo1 Do
652 Q 865 Q
653 q 866 q
654 -0.88367 0.26685 0.22710 0.47909 129.84900 542.75100 cm  
655 -0.00000 0.00000 103.45000 53.00000 re W n  
656 -q  
657 -0 1 0 RG  
658 -5 w  
659 -0 0 103.45 53 re s  
660 -0 0 1 RG  
661 -5 5 15 15 re s  
662 -Q  
663 - 867 +0.88367 0.00000 0.00000 0.47909 129.84900 542.75100 cm
  868 +/Fxo2 Do
664 Q 869 Q
665 q 870 q
666 1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm 871 1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm
667 -0.00000 0.00000 72.80000 98.00000 re W n  
668 -q  
669 -0 0 1 RG  
670 -5 w  
671 -0 0 72.8 98 re s  
672 -1 0 0 RG  
673 -5 5 15 15 re s  
674 -Q  
675 - 872 +/Fxo3 Do
676 Q 873 Q
677 endstream 874 endstream
678 endobj 875 endobj
679 876
680 -35 0 obj  
681 -487 877 +47 0 obj
  878 +207
682 endobj 879 endobj
683 880
684 -36 0 obj 881 +48 0 obj
685 << 882 <<
686 >> 883 >>
687 endobj 884 endobj
688 885
689 -%% Contents for page 4  
690 -37 0 obj 886 +49 0 obj
691 << 887 <<
692 - /Length 38 0 R 888 + /BBox [
  889 + 0
  890 + 0
  891 + 67.3
  892 + 50.95
  893 + ]
  894 + /Matrix [
  895 + .707
  896 + .5
  897 + -.5
  898 + .707
  899 + 0
  900 + 0
  901 + ]
  902 + /Resources <<
  903 + /Font <<
  904 + >>
  905 + /ProcSet [
  906 + /PDF
  907 + /Text
  908 + ]
  909 + >>
  910 + /Subtype /Form
  911 + /Type /XObject
  912 + /Length 50 0 R
693 >> 913 >>
694 stream 914 stream
695 q 915 q
  916 +1 0 0 RG
  917 +5 w
  918 +0 0 67.3 50.95 re s
  919 +0 1 0 RG
  920 +5 5 15 15 re s
  921 +Q
696 endstream 922 endstream
697 endobj 923 endobj
698 924
699 -38 0 obj 925 +50 0 obj
  926 +61
  927 +endobj
  928 +
  929 +51 0 obj
  930 +<<
  931 + /BBox [
  932 + 0
  933 + 0
  934 + 103.45
  935 + 53
  936 + ]
  937 + /Matrix [
  938 + 1
  939 + .557
  940 + .257
  941 + 1
  942 + 0
  943 + 0
  944 + ]
  945 + /Resources <<
  946 + /Font <<
  947 + >>
  948 + /ProcSet [
  949 + /PDF
  950 + /Text
  951 + ]
  952 + >>
  953 + /Subtype /Form
  954 + /Type /XObject
  955 + /Length 52 0 R
  956 +>>
  957 +stream
  958 +q
  959 +0 1 0 RG
  960 +5 w
  961 +0 0 103.45 53 re s
  962 +0 0 1 RG
  963 +5 5 15 15 re s
  964 +1 w
  965 +1 0 0 RG
  966 +-10 25 m
  967 +113.45 25 l
  968 +52 -10 m
  969 +52 63 l
  970 +s
  971 +Q
  972 +endstream
  973 +endobj
  974 +
  975 +52 0 obj
  976 +113
  977 +endobj
  978 +
  979 +53 0 obj
  980 +<<
  981 + /BBox [
  982 + 0
  983 + 0
  984 + 72.8
  985 + 98
  986 + ]
  987 + /Resources <<
  988 + /Font <<
  989 + >>
  990 + /ProcSet [
  991 + /PDF
  992 + /Text
  993 + ]
  994 + >>
  995 + /Subtype /Form
  996 + /Type /XObject
  997 + /Length 54 0 R
  998 +>>
  999 +stream
  1000 +q
  1001 +0 0 1 RG
  1002 +5 w
  1003 +0 0 72.8 98 re s
  1004 +1 0 0 RG
  1005 +5 5 15 15 re s
  1006 +Q
  1007 +endstream
  1008 +endobj
  1009 +
  1010 +54 0 obj
  1011 +58
  1012 +endobj
  1013 +
  1014 +%% Contents for page 4
  1015 +55 0 obj
  1016 +<<
  1017 + /Length 56 0 R
  1018 +>>
  1019 +stream
  1020 +q
  1021 +endstream
  1022 +endobj
  1023 +
  1024 +56 0 obj
700 2 1025 2
701 endobj 1026 endobj
702 1027
703 %% Contents for page 4 1028 %% Contents for page 4
704 -39 0 obj 1029 +57 0 obj
705 << 1030 <<
706 - /Length 40 0 R 1031 + /Length 58 0 R
707 >> 1032 >>
708 stream 1033 stream
709 0.1 w 1034 0.1 w
@@ -727,21 +1052,71 @@ endstream @@ -727,21 +1052,71 @@ endstream
727 endobj 1052 endobj
728 1053
729 %QDF: ignore_newline 1054 %QDF: ignore_newline
730 -40 0 obj 1055 +58 0 obj
731 240 1056 240
732 endobj 1057 endobj
733 1058
734 %% Contents for page 4 1059 %% Contents for page 4
735 -41 0 obj 1060 +59 0 obj
736 << 1061 <<
737 - /Length 42 0 R 1062 + /Length 60 0 R
738 >> 1063 >>
739 stream 1064 stream
740 1065
741 Q 1066 Q
742 q 1067 q
743 -0.65131 0.36563 -0.46062 0.51700 153.31752 651.15100 cm  
744 -0.00000 0.00000 67.30000 50.95000 re W n 1068 +0.92124 0.00000 0.00000 0.73126 153.31752 651.15100 cm
  1069 +/Fxo1 Do
  1070 +Q
  1071 +q
  1072 +0.88367 0.00000 0.00000 0.47909 129.84900 542.75100 cm
  1073 +/Fxo2 Do
  1074 +Q
  1075 +q
  1076 +1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm
  1077 +/Fxo3 Do
  1078 +Q
  1079 +endstream
  1080 +endobj
  1081 +
  1082 +60 0 obj
  1083 +207
  1084 +endobj
  1085 +
  1086 +61 0 obj
  1087 +<<
  1088 +>>
  1089 +endobj
  1090 +
  1091 +62 0 obj
  1092 +<<
  1093 + /BBox [
  1094 + 0
  1095 + 0
  1096 + 67.3
  1097 + 50.95
  1098 + ]
  1099 + /Matrix [
  1100 + .707
  1101 + .5
  1102 + -.5
  1103 + .707
  1104 + 0
  1105 + 0
  1106 + ]
  1107 + /Resources <<
  1108 + /Font <<
  1109 + >>
  1110 + /ProcSet [
  1111 + /PDF
  1112 + /Text
  1113 + ]
  1114 + >>
  1115 + /Subtype /Form
  1116 + /Type /XObject
  1117 + /Length 63 0 R
  1118 +>>
  1119 +stream
745 q 1120 q
746 60 r 1121 60 r
747 1 0 0 RG 1122 1 0 0 RG
@@ -750,23 +1125,84 @@ q @@ -750,23 +1125,84 @@ q
750 0 1 0 RG 1125 0 1 0 RG
751 5 5 15 15 re s 1126 5 5 15 15 re s
752 Q 1127 Q
  1128 +endstream
  1129 +endobj
753 1130
754 -Q  
755 -q  
756 -0.88367 0.26685 0.22710 0.47909 129.84900 542.75100 cm  
757 -0.00000 0.00000 103.45000 53.00000 re W n 1131 +63 0 obj
  1132 +66
  1133 +endobj
  1134 +
  1135 +64 0 obj
  1136 +<<
  1137 + /BBox [
  1138 + 0
  1139 + 0
  1140 + 103.45
  1141 + 53
  1142 + ]
  1143 + /Matrix [
  1144 + 1
  1145 + .557
  1146 + .257
  1147 + 1
  1148 + 0
  1149 + 0
  1150 + ]
  1151 + /Resources <<
  1152 + /Font <<
  1153 + >>
  1154 + /ProcSet [
  1155 + /PDF
  1156 + /Text
  1157 + ]
  1158 + >>
  1159 + /Subtype /Form
  1160 + /Type /XObject
  1161 + /Length 65 0 R
  1162 +>>
  1163 +stream
758 q 1164 q
759 0 1 0 RG 1165 0 1 0 RG
760 5 w 1166 5 w
761 0 0 103.45 53 re s 1167 0 0 103.45 53 re s
762 0 0 1 RG 1168 0 0 1 RG
763 5 5 15 15 re s 1169 5 5 15 15 re s
  1170 +1 w
  1171 +1 0 0 RG
  1172 +-10 25 m
  1173 +113.45 25 l
  1174 +52 -10 m
  1175 +52 63 l
  1176 +s
764 Q 1177 Q
  1178 +endstream
  1179 +endobj
765 1180
766 -Q  
767 -q  
768 -1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm  
769 -0.00000 0.00000 72.80000 98.00000 re W n 1181 +65 0 obj
  1182 +113
  1183 +endobj
  1184 +
  1185 +66 0 obj
  1186 +<<
  1187 + /BBox [
  1188 + 0
  1189 + 0
  1190 + 72.8
  1191 + 98
  1192 + ]
  1193 + /Resources <<
  1194 + /Font <<
  1195 + >>
  1196 + /ProcSet [
  1197 + /PDF
  1198 + /Text
  1199 + ]
  1200 + >>
  1201 + /Subtype /Form
  1202 + /Type /XObject
  1203 + /Length 67 0 R
  1204 +>>
  1205 +stream
770 q 1206 q
771 0 0 1 RG 1207 0 0 1 RG
772 5 w 1208 5 w
@@ -774,38 +1210,31 @@ q @@ -774,38 +1210,31 @@ q
774 1 0 0 RG 1210 1 0 0 RG
775 5 5 15 15 re s 1211 5 5 15 15 re s
776 Q 1212 Q
777 -  
778 -Q  
779 endstream 1213 endstream
780 endobj 1214 endobj
781 1215
782 -42 0 obj  
783 -492  
784 -endobj  
785 -  
786 -43 0 obj  
787 -<<  
788 ->> 1216 +67 0 obj
  1217 +58
789 endobj 1218 endobj
790 1219
791 %% Contents for page 5 1220 %% Contents for page 5
792 -44 0 obj 1221 +68 0 obj
793 << 1222 <<
794 - /Length 45 0 R 1223 + /Length 69 0 R
795 >> 1224 >>
796 stream 1225 stream
797 q 1226 q
798 endstream 1227 endstream
799 endobj 1228 endobj
800 1229
801 -45 0 obj 1230 +69 0 obj
802 2 1231 2
803 endobj 1232 endobj
804 1233
805 %% Contents for page 5 1234 %% Contents for page 5
806 -46 0 obj 1235 +70 0 obj
807 << 1236 <<
808 - /Length 47 0 R 1237 + /Length 71 0 R
809 >> 1238 >>
810 stream 1239 stream
811 0.1 w 1240 0.1 w
@@ -829,21 +1258,63 @@ endstream @@ -829,21 +1258,63 @@ endstream
829 endobj 1258 endobj
830 1259
831 %QDF: ignore_newline 1260 %QDF: ignore_newline
832 -47 0 obj 1261 +71 0 obj
833 240 1262 240
834 endobj 1263 endobj
835 1264
836 %% Contents for page 5 1265 %% Contents for page 5
837 -48 0 obj 1266 +72 0 obj
838 << 1267 <<
839 - /Length 49 0 R 1268 + /Length 73 0 R
840 >> 1269 >>
841 stream 1270 stream
842 1271
843 Q 1272 Q
844 q 1273 q
845 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 1274 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
846 -0.00000 0.00000 67.30000 50.95000 re W n 1275 +/Fxo1 Do
  1276 +Q
  1277 +q
  1278 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  1279 +/Fxo2 Do
  1280 +Q
  1281 +q
  1282 +-1.00003 0.00000 0.00000 -0.99998 294.14900 626.24700 cm
  1283 +/Fxo3 Do
  1284 +Q
  1285 +endstream
  1286 +endobj
  1287 +
  1288 +73 0 obj
  1289 +209
  1290 +endobj
  1291 +
  1292 +74 0 obj
  1293 +<<
  1294 +>>
  1295 +endobj
  1296 +
  1297 +75 0 obj
  1298 +<<
  1299 + /BBox [
  1300 + 0
  1301 + 0
  1302 + 67.3
  1303 + 50.95
  1304 + ]
  1305 + /Resources <<
  1306 + /Font <<
  1307 + >>
  1308 + /ProcSet [
  1309 + /PDF
  1310 + /Text
  1311 + ]
  1312 + >>
  1313 + /Subtype /Form
  1314 + /Type /XObject
  1315 + /Length 76 0 R
  1316 +>>
  1317 +stream
847 q 1318 q
848 1 0 0 RG 1319 1 0 0 RG
849 5 w 1320 5 w
@@ -851,23 +1322,76 @@ q @@ -851,23 +1322,76 @@ q
851 0 1 0 RG 1322 0 1 0 RG
852 5 5 15 15 re s 1323 5 5 15 15 re s
853 Q 1324 Q
  1325 +endstream
  1326 +endobj
854 1327
855 -Q  
856 -q  
857 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
858 -0.00000 0.00000 103.45000 53.00000 re W n 1328 +76 0 obj
  1329 +61
  1330 +endobj
  1331 +
  1332 +77 0 obj
  1333 +<<
  1334 + /BBox [
  1335 + 0
  1336 + 0
  1337 + 103.45
  1338 + 53
  1339 + ]
  1340 + /Resources <<
  1341 + /Font <<
  1342 + >>
  1343 + /ProcSet [
  1344 + /PDF
  1345 + /Text
  1346 + ]
  1347 + >>
  1348 + /Subtype /Form
  1349 + /Type /XObject
  1350 + /Length 78 0 R
  1351 +>>
  1352 +stream
859 q 1353 q
860 0 1 0 RG 1354 0 1 0 RG
861 5 w 1355 5 w
862 0 0 103.45 53 re s 1356 0 0 103.45 53 re s
863 0 0 1 RG 1357 0 0 1 RG
864 5 5 15 15 re s 1358 5 5 15 15 re s
  1359 +1 w
  1360 +1 0 0 RG
  1361 +-10 25 m
  1362 +113.45 25 l
  1363 +52 -10 m
  1364 +52 63 l
  1365 +s
865 Q 1366 Q
  1367 +endstream
  1368 +endobj
866 1369
867 -Q  
868 -q  
869 --1.00003 0.00000 0.00000 -0.99998 294.14900 626.24700 cm  
870 -0.00000 0.00000 72.80000 98.00000 re W n 1370 +78 0 obj
  1371 +113
  1372 +endobj
  1373 +
  1374 +79 0 obj
  1375 +<<
  1376 + /BBox [
  1377 + 0
  1378 + 0
  1379 + 72.8
  1380 + 98
  1381 + ]
  1382 + /Resources <<
  1383 + /Font <<
  1384 + >>
  1385 + /ProcSet [
  1386 + /PDF
  1387 + /Text
  1388 + ]
  1389 + >>
  1390 + /Subtype /Form
  1391 + /Type /XObject
  1392 + /Length 80 0 R
  1393 +>>
  1394 +stream
871 q 1395 q
872 0 0 1 RG 1396 0 0 1 RG
873 5 w 1397 5 w
@@ -875,38 +1399,31 @@ q @@ -875,38 +1399,31 @@ q
875 1 0 0 RG 1399 1 0 0 RG
876 5 5 15 15 re s 1400 5 5 15 15 re s
877 Q 1401 Q
878 -  
879 -Q  
880 endstream 1402 endstream
881 endobj 1403 endobj
882 1404
883 -49 0 obj  
884 -488  
885 -endobj  
886 -  
887 -50 0 obj  
888 -<<  
889 ->> 1405 +80 0 obj
  1406 +58
890 endobj 1407 endobj
891 1408
892 %% Contents for page 6 1409 %% Contents for page 6
893 -51 0 obj 1410 +81 0 obj
894 << 1411 <<
895 - /Length 52 0 R 1412 + /Length 82 0 R
896 >> 1413 >>
897 stream 1414 stream
898 q 1415 q
899 endstream 1416 endstream
900 endobj 1417 endobj
901 1418
902 -52 0 obj 1419 +82 0 obj
903 2 1420 2
904 endobj 1421 endobj
905 1422
906 %% Contents for page 6 1423 %% Contents for page 6
907 -53 0 obj 1424 +83 0 obj
908 << 1425 <<
909 - /Length 54 0 R 1426 + /Length 84 0 R
910 >> 1427 >>
911 stream 1428 stream
912 0.1 w 1429 0.1 w
@@ -930,21 +1447,71 @@ endstream @@ -930,21 +1447,71 @@ endstream
930 endobj 1447 endobj
931 1448
932 %QDF: ignore_newline 1449 %QDF: ignore_newline
933 -54 0 obj 1450 +84 0 obj
934 240 1451 240
935 endobj 1452 endobj
936 1453
937 %% Contents for page 6 1454 %% Contents for page 6
938 -55 0 obj 1455 +85 0 obj
939 << 1456 <<
940 - /Length 56 0 R 1457 + /Length 86 0 R
941 >> 1458 >>
942 stream 1459 stream
943 1460
944 Q 1461 Q
945 q 1462 q
946 --0.36563 0.65131 -0.51700 -0.46062 180.79700 725.56752 cm  
947 -0.00000 0.00000 67.30000 50.95000 re W n 1463 +0.00000 0.92124 -0.73126 0.00000 180.79700 725.56752 cm
  1464 +/Fxo1 Do
  1465 +Q
  1466 +q
  1467 +0.00000 0.44193 -0.23955 0.00000 254.71087 551.55555 cm
  1468 +/Fxo2 Do
  1469 +Q
  1470 +q
  1471 +0.00000 1.00003 -0.99998 0.00000 392.14700 528.24900 cm
  1472 +/Fxo3 Do
  1473 +Q
  1474 +endstream
  1475 +endobj
  1476 +
  1477 +86 0 obj
  1478 +210
  1479 +endobj
  1480 +
  1481 +87 0 obj
  1482 +<<
  1483 +>>
  1484 +endobj
  1485 +
  1486 +88 0 obj
  1487 +<<
  1488 + /BBox [
  1489 + 0
  1490 + 0
  1491 + 67.3
  1492 + 50.95
  1493 + ]
  1494 + /Matrix [
  1495 + .707
  1496 + .5
  1497 + -.5
  1498 + .707
  1499 + 0
  1500 + 0
  1501 + ]
  1502 + /Resources <<
  1503 + /Font <<
  1504 + >>
  1505 + /ProcSet [
  1506 + /PDF
  1507 + /Text
  1508 + ]
  1509 + >>
  1510 + /Subtype /Form
  1511 + /Type /XObject
  1512 + /Length 89 0 R
  1513 +>>
  1514 +stream
948 q 1515 q
949 1 0 0 RG 1516 1 0 0 RG
950 5 w 1517 5 w
@@ -952,23 +1519,84 @@ q @@ -952,23 +1519,84 @@ q
952 0 1 0 RG 1519 0 1 0 RG
953 5 5 15 15 re s 1520 5 5 15 15 re s
954 Q 1521 Q
  1522 +endstream
  1523 +endobj
955 1524
956 -Q  
957 -q  
958 --0.26685 0.88387 -0.47909 0.22671 182.84700 595.74900 cm  
959 -0.00000 0.00000 103.45000 53.00000 re W n 1525 +89 0 obj
  1526 +61
  1527 +endobj
  1528 +
  1529 +90 0 obj
  1530 +<<
  1531 + /BBox [
  1532 + 0
  1533 + 0
  1534 + 103.45
  1535 + 53
  1536 + ]
  1537 + /Matrix [
  1538 + 2
  1539 + 1.114
  1540 + .513
  1541 + 2
  1542 + 100
  1543 + 300
  1544 + ]
  1545 + /Resources <<
  1546 + /Font <<
  1547 + >>
  1548 + /ProcSet [
  1549 + /PDF
  1550 + /Text
  1551 + ]
  1552 + >>
  1553 + /Subtype /Form
  1554 + /Type /XObject
  1555 + /Length 91 0 R
  1556 +>>
  1557 +stream
960 q 1558 q
961 0 1 0 RG 1559 0 1 0 RG
962 5 w 1560 5 w
963 0 0 103.45 53 re s 1561 0 0 103.45 53 re s
964 0 0 1 RG 1562 0 0 1 RG
965 5 5 15 15 re s 1563 5 5 15 15 re s
  1564 +1 w
  1565 +1 0 0 RG
  1566 +-10 25 m
  1567 +113.45 25 l
  1568 +52 -10 m
  1569 +52 63 l
  1570 +s
966 Q 1571 Q
  1572 +endstream
  1573 +endobj
967 1574
968 -Q  
969 -q  
970 -0.00000 1.00003 -0.99998 0.00000 392.14700 528.24900 cm  
971 -0.00000 0.00000 72.80000 98.00000 re W n 1575 +91 0 obj
  1576 +113
  1577 +endobj
  1578 +
  1579 +92 0 obj
  1580 +<<
  1581 + /BBox [
  1582 + 0
  1583 + 0
  1584 + 72.8
  1585 + 98
  1586 + ]
  1587 + /Resources <<
  1588 + /Font <<
  1589 + >>
  1590 + /ProcSet [
  1591 + /PDF
  1592 + /Text
  1593 + ]
  1594 + >>
  1595 + /Subtype /Form
  1596 + /Type /XObject
  1597 + /Length 93 0 R
  1598 +>>
  1599 +stream
972 q 1600 q
973 0 0 1 RG 1601 0 0 1 RG
974 5 w 1602 5 w
@@ -976,38 +1604,31 @@ q @@ -976,38 +1604,31 @@ q
976 1 0 0 RG 1604 1 0 0 RG
977 5 5 15 15 re s 1605 5 5 15 15 re s
978 Q 1606 Q
979 -  
980 -Q  
981 endstream 1607 endstream
982 endobj 1608 endobj
983 1609
984 -56 0 obj  
985 -492  
986 -endobj  
987 -  
988 -57 0 obj  
989 -<<  
990 ->> 1610 +93 0 obj
  1611 +58
991 endobj 1612 endobj
992 1613
993 %% Contents for page 7 1614 %% Contents for page 7
994 -58 0 obj 1615 +94 0 obj
995 << 1616 <<
996 - /Length 59 0 R 1617 + /Length 95 0 R
997 >> 1618 >>
998 stream 1619 stream
999 q 1620 q
1000 endstream 1621 endstream
1001 endobj 1622 endobj
1002 1623
1003 -59 0 obj 1624 +95 0 obj
1004 2 1625 2
1005 endobj 1626 endobj
1006 1627
1007 %% Contents for page 7 1628 %% Contents for page 7
1008 -60 0 obj 1629 +96 0 obj
1009 << 1630 <<
1010 - /Length 61 0 R 1631 + /Length 97 0 R
1011 >> 1632 >>
1012 stream 1633 stream
1013 0.1 w 1634 0.1 w
@@ -1031,21 +1652,63 @@ endstream @@ -1031,21 +1652,63 @@ endstream
1031 endobj 1652 endobj
1032 1653
1033 %QDF: ignore_newline 1654 %QDF: ignore_newline
1034 -61 0 obj 1655 +97 0 obj
1035 240 1656 240
1036 endobj 1657 endobj
1037 1658
1038 %% Contents for page 7 1659 %% Contents for page 7
1039 -62 0 obj 1660 +98 0 obj
1040 << 1661 <<
1041 - /Length 63 0 R 1662 + /Length 99 0 R
1042 >> 1663 >>
1043 stream 1664 stream
1044 1665
1045 Q 1666 Q
1046 q 1667 q
1047 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 1668 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
1048 -0.00000 0.00000 67.30000 50.95000 re W n 1669 +/Fxo1 Do
  1670 +Q
  1671 +q
  1672 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  1673 +/Fxo2 Do
  1674 +Q
  1675 +q
  1676 +1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm
  1677 +/Fxo3 Do
  1678 +Q
  1679 +endstream
  1680 +endobj
  1681 +
  1682 +99 0 obj
  1683 +207
  1684 +endobj
  1685 +
  1686 +100 0 obj
  1687 +<<
  1688 +>>
  1689 +endobj
  1690 +
  1691 +101 0 obj
  1692 +<<
  1693 + /BBox [
  1694 + 0
  1695 + 0
  1696 + 67.3
  1697 + 50.95
  1698 + ]
  1699 + /Resources <<
  1700 + /Font <<
  1701 + >>
  1702 + /ProcSet [
  1703 + /PDF
  1704 + /Text
  1705 + ]
  1706 + >>
  1707 + /Subtype /Form
  1708 + /Type /XObject
  1709 + /Length 102 0 R
  1710 +>>
  1711 +stream
1049 q 1712 q
1050 60 r 1713 60 r
1051 1 0 0 RG 1714 1 0 0 RG
@@ -1054,23 +1717,76 @@ q @@ -1054,23 +1717,76 @@ q
1054 0 1 0 RG 1717 0 1 0 RG
1055 5 5 15 15 re s 1718 5 5 15 15 re s
1056 Q 1719 Q
  1720 +endstream
  1721 +endobj
1057 1722
1058 -Q  
1059 -q  
1060 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
1061 -0.00000 0.00000 103.45000 53.00000 re W n 1723 +102 0 obj
  1724 +66
  1725 +endobj
  1726 +
  1727 +103 0 obj
  1728 +<<
  1729 + /BBox [
  1730 + 0
  1731 + 0
  1732 + 103.45
  1733 + 53
  1734 + ]
  1735 + /Resources <<
  1736 + /Font <<
  1737 + >>
  1738 + /ProcSet [
  1739 + /PDF
  1740 + /Text
  1741 + ]
  1742 + >>
  1743 + /Subtype /Form
  1744 + /Type /XObject
  1745 + /Length 104 0 R
  1746 +>>
  1747 +stream
1062 q 1748 q
1063 0 1 0 RG 1749 0 1 0 RG
1064 5 w 1750 5 w
1065 0 0 103.45 53 re s 1751 0 0 103.45 53 re s
1066 0 0 1 RG 1752 0 0 1 RG
1067 5 5 15 15 re s 1753 5 5 15 15 re s
  1754 +1 w
  1755 +1 0 0 RG
  1756 +-10 25 m
  1757 +113.45 25 l
  1758 +52 -10 m
  1759 +52 63 l
  1760 +s
1068 Q 1761 Q
  1762 +endstream
  1763 +endobj
1069 1764
1070 -Q  
1071 -q  
1072 -1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm  
1073 -0.00000 0.00000 72.80000 98.00000 re W n 1765 +104 0 obj
  1766 +113
  1767 +endobj
  1768 +
  1769 +105 0 obj
  1770 +<<
  1771 + /BBox [
  1772 + 0
  1773 + 0
  1774 + 72.8
  1775 + 98
  1776 + ]
  1777 + /Resources <<
  1778 + /Font <<
  1779 + >>
  1780 + /ProcSet [
  1781 + /PDF
  1782 + /Text
  1783 + ]
  1784 + >>
  1785 + /Subtype /Form
  1786 + /Type /XObject
  1787 + /Length 106 0 R
  1788 +>>
  1789 +stream
1074 q 1790 q
1075 0 0 1 RG 1791 0 0 1 RG
1076 5 w 1792 5 w
@@ -1078,38 +1794,31 @@ q @@ -1078,38 +1794,31 @@ q
1078 1 0 0 RG 1794 1 0 0 RG
1079 5 5 15 15 re s 1795 5 5 15 15 re s
1080 Q 1796 Q
1081 -  
1082 -Q  
1083 endstream 1797 endstream
1084 endobj 1798 endobj
1085 1799
1086 -63 0 obj  
1087 -491  
1088 -endobj  
1089 -  
1090 -64 0 obj  
1091 -<<  
1092 ->> 1800 +106 0 obj
  1801 +58
1093 endobj 1802 endobj
1094 1803
1095 %% Contents for page 8 1804 %% Contents for page 8
1096 -65 0 obj 1805 +107 0 obj
1097 << 1806 <<
1098 - /Length 66 0 R 1807 + /Length 108 0 R
1099 >> 1808 >>
1100 stream 1809 stream
1101 q 1810 q
1102 endstream 1811 endstream
1103 endobj 1812 endobj
1104 1813
1105 -66 0 obj 1814 +108 0 obj
1106 2 1815 2
1107 endobj 1816 endobj
1108 1817
1109 %% Contents for page 8 1818 %% Contents for page 8
1110 -67 0 obj 1819 +109 0 obj
1111 << 1820 <<
1112 - /Length 68 0 R 1821 + /Length 110 0 R
1113 >> 1822 >>
1114 stream 1823 stream
1115 0.1 w 1824 0.1 w
@@ -1133,21 +1842,63 @@ endstream @@ -1133,21 +1842,63 @@ endstream
1133 endobj 1842 endobj
1134 1843
1135 %QDF: ignore_newline 1844 %QDF: ignore_newline
1136 -68 0 obj 1845 +110 0 obj
1137 240 1846 240
1138 endobj 1847 endobj
1139 1848
1140 %% Contents for page 8 1849 %% Contents for page 8
1141 -69 0 obj 1850 +111 0 obj
1142 << 1851 <<
1143 - /Length 70 0 R 1852 + /Length 112 0 R
1144 >> 1853 >>
1145 stream 1854 stream
1146 1855
1147 Q 1856 Q
1148 q 1857 q
1149 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 1858 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
1150 -0.00000 0.00000 67.30000 50.95000 re W n 1859 +/Fxo1 Do
  1860 +Q
  1861 +q
  1862 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  1863 +/Fxo2 Do
  1864 +Q
  1865 +q
  1866 +0.00000 -1.00003 0.99998 0.00000 196.15100 528.24900 cm
  1867 +/Fxo3 Do
  1868 +Q
  1869 +endstream
  1870 +endobj
  1871 +
  1872 +112 0 obj
  1873 +208
  1874 +endobj
  1875 +
  1876 +113 0 obj
  1877 +<<
  1878 +>>
  1879 +endobj
  1880 +
  1881 +114 0 obj
  1882 +<<
  1883 + /BBox [
  1884 + 0
  1885 + 0
  1886 + 67.3
  1887 + 50.95
  1888 + ]
  1889 + /Resources <<
  1890 + /Font <<
  1891 + >>
  1892 + /ProcSet [
  1893 + /PDF
  1894 + /Text
  1895 + ]
  1896 + >>
  1897 + /Subtype /Form
  1898 + /Type /XObject
  1899 + /Length 115 0 R
  1900 +>>
  1901 +stream
1151 q 1902 q
1152 1 0 0 RG 1903 1 0 0 RG
1153 5 w 1904 5 w
@@ -1155,23 +1906,76 @@ q @@ -1155,23 +1906,76 @@ q
1155 0 1 0 RG 1906 0 1 0 RG
1156 5 5 15 15 re s 1907 5 5 15 15 re s
1157 Q 1908 Q
  1909 +endstream
  1910 +endobj
1158 1911
1159 -Q  
1160 -q  
1161 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
1162 -0.00000 0.00000 103.45000 53.00000 re W n 1912 +115 0 obj
  1913 +61
  1914 +endobj
  1915 +
  1916 +116 0 obj
  1917 +<<
  1918 + /BBox [
  1919 + 0
  1920 + 0
  1921 + 103.45
  1922 + 53
  1923 + ]
  1924 + /Resources <<
  1925 + /Font <<
  1926 + >>
  1927 + /ProcSet [
  1928 + /PDF
  1929 + /Text
  1930 + ]
  1931 + >>
  1932 + /Subtype /Form
  1933 + /Type /XObject
  1934 + /Length 117 0 R
  1935 +>>
  1936 +stream
1163 q 1937 q
1164 0 1 0 RG 1938 0 1 0 RG
1165 5 w 1939 5 w
1166 0 0 103.45 53 re s 1940 0 0 103.45 53 re s
1167 0 0 1 RG 1941 0 0 1 RG
1168 5 5 15 15 re s 1942 5 5 15 15 re s
  1943 +1 w
  1944 +1 0 0 RG
  1945 +-10 25 m
  1946 +113.45 25 l
  1947 +52 -10 m
  1948 +52 63 l
  1949 +s
1169 Q 1950 Q
  1951 +endstream
  1952 +endobj
1170 1953
1171 -Q  
1172 -q  
1173 -0.00000 -1.00003 0.99998 0.00000 196.15100 528.24900 cm  
1174 -0.00000 0.00000 72.80000 98.00000 re W n 1954 +117 0 obj
  1955 +113
  1956 +endobj
  1957 +
  1958 +118 0 obj
  1959 +<<
  1960 + /BBox [
  1961 + 0
  1962 + 0
  1963 + 72.8
  1964 + 98
  1965 + ]
  1966 + /Resources <<
  1967 + /Font <<
  1968 + >>
  1969 + /ProcSet [
  1970 + /PDF
  1971 + /Text
  1972 + ]
  1973 + >>
  1974 + /Subtype /Form
  1975 + /Type /XObject
  1976 + /Length 119 0 R
  1977 +>>
  1978 +stream
1175 q 1979 q
1176 0 0 1 RG 1980 0 0 1 RG
1177 5 w 1981 5 w
@@ -1179,38 +1983,31 @@ q @@ -1179,38 +1983,31 @@ q
1179 1 0 0 RG 1983 1 0 0 RG
1180 5 5 15 15 re s 1984 5 5 15 15 re s
1181 Q 1985 Q
1182 -  
1183 -Q  
1184 endstream 1986 endstream
1185 endobj 1987 endobj
1186 1988
1187 -70 0 obj  
1188 -487  
1189 -endobj  
1190 -  
1191 -71 0 obj  
1192 -<<  
1193 ->> 1989 +119 0 obj
  1990 +58
1194 endobj 1991 endobj
1195 1992
1196 %% Contents for page 9 1993 %% Contents for page 9
1197 -72 0 obj 1994 +120 0 obj
1198 << 1995 <<
1199 - /Length 73 0 R 1996 + /Length 121 0 R
1200 >> 1997 >>
1201 stream 1998 stream
1202 q 1999 q
1203 endstream 2000 endstream
1204 endobj 2001 endobj
1205 2002
1206 -73 0 obj 2003 +121 0 obj
1207 2 2004 2
1208 endobj 2005 endobj
1209 2006
1210 %% Contents for page 9 2007 %% Contents for page 9
1211 -74 0 obj 2008 +122 0 obj
1212 << 2009 <<
1213 - /Length 75 0 R 2010 + /Length 123 0 R
1214 >> 2011 >>
1215 stream 2012 stream
1216 0.1 w 2013 0.1 w
@@ -1234,21 +2031,63 @@ endstream @@ -1234,21 +2031,63 @@ endstream
1234 endobj 2031 endobj
1235 2032
1236 %QDF: ignore_newline 2033 %QDF: ignore_newline
1237 -75 0 obj 2034 +123 0 obj
1238 240 2035 240
1239 endobj 2036 endobj
1240 2037
1241 %% Contents for page 9 2038 %% Contents for page 9
1242 -76 0 obj 2039 +124 0 obj
1243 << 2040 <<
1244 - /Length 77 0 R 2041 + /Length 125 0 R
1245 >> 2042 >>
1246 stream 2043 stream
1247 2044
1248 Q 2045 Q
1249 q 2046 q
1250 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm 2047 1.00003 0.00000 0.00000 0.99996 129.84900 651.15100 cm
1251 -0.00000 0.00000 67.30000 50.95000 re W n 2048 +/Fxo1 Do
  2049 +Q
  2050 +q
  2051 +1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm
  2052 +/Fxo2 Do
  2053 +Q
  2054 +q
  2055 +1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm
  2056 +/Fxo3 Do
  2057 +Q
  2058 +endstream
  2059 +endobj
  2060 +
  2061 +125 0 obj
  2062 +207
  2063 +endobj
  2064 +
  2065 +126 0 obj
  2066 +<<
  2067 +>>
  2068 +endobj
  2069 +
  2070 +127 0 obj
  2071 +<<
  2072 + /BBox [
  2073 + 0
  2074 + 0
  2075 + 67.3
  2076 + 50.95
  2077 + ]
  2078 + /Resources <<
  2079 + /Font <<
  2080 + >>
  2081 + /ProcSet [
  2082 + /PDF
  2083 + /Text
  2084 + ]
  2085 + >>
  2086 + /Subtype /Form
  2087 + /Type /XObject
  2088 + /Length 128 0 R
  2089 +>>
  2090 +stream
1252 q 2091 q
1253 1 0 0 RG 2092 1 0 0 RG
1254 5 w 2093 5 w
@@ -1256,23 +2095,76 @@ q @@ -1256,23 +2095,76 @@ q
1256 0 1 0 RG 2095 0 1 0 RG
1257 5 5 15 15 re s 2096 5 5 15 15 re s
1258 Q 2097 Q
  2098 +endstream
  2099 +endobj
1259 2100
1260 -Q  
1261 -q  
1262 -1.00002 0.00000 0.00000 0.99996 129.84900 542.75100 cm  
1263 -0.00000 0.00000 103.45000 53.00000 re W n 2101 +128 0 obj
  2102 +61
  2103 +endobj
  2104 +
  2105 +129 0 obj
  2106 +<<
  2107 + /BBox [
  2108 + 0
  2109 + 0
  2110 + 103.45
  2111 + 53
  2112 + ]
  2113 + /Resources <<
  2114 + /Font <<
  2115 + >>
  2116 + /ProcSet [
  2117 + /PDF
  2118 + /Text
  2119 + ]
  2120 + >>
  2121 + /Subtype /Form
  2122 + /Type /XObject
  2123 + /Length 130 0 R
  2124 +>>
  2125 +stream
1264 q 2126 q
1265 0 1 0 RG 2127 0 1 0 RG
1266 5 w 2128 5 w
1267 0 0 103.45 53 re s 2129 0 0 103.45 53 re s
1268 0 0 1 RG 2130 0 0 1 RG
1269 5 5 15 15 re s 2131 5 5 15 15 re s
  2132 +1 w
  2133 +1 0 0 RG
  2134 +-10 25 m
  2135 +113.45 25 l
  2136 +52 -10 m
  2137 +52 63 l
  2138 +s
1270 Q 2139 Q
  2140 +endstream
  2141 +endobj
1271 2142
1272 -Q  
1273 -q  
1274 -1.00003 0.00000 0.00000 0.99998 294.14900 430.25100 cm  
1275 -0.00000 0.00000 72.80000 98.00000 re W n 2143 +130 0 obj
  2144 +113
  2145 +endobj
  2146 +
  2147 +131 0 obj
  2148 +<<
  2149 + /BBox [
  2150 + 0
  2151 + 0
  2152 + 72.8
  2153 + 98
  2154 + ]
  2155 + /Resources <<
  2156 + /Font <<
  2157 + >>
  2158 + /ProcSet [
  2159 + /PDF
  2160 + /Text
  2161 + ]
  2162 + >>
  2163 + /Subtype /Form
  2164 + /Type /XObject
  2165 + /Length 132 0 R
  2166 +>>
  2167 +stream
1276 q 2168 q
1277 0 0 1 RG 2169 0 0 1 RG
1278 5 w 2170 5 w
@@ -1280,67 +2172,60 @@ q @@ -1280,67 +2172,60 @@ q
1280 1 0 0 RG 2172 1 0 0 RG
1281 5 5 15 15 re s 2173 5 5 15 15 re s
1282 Q 2174 Q
1283 -  
1284 -Q  
1285 endstream 2175 endstream
1286 endobj 2176 endobj
1287 2177
1288 -77 0 obj  
1289 -486  
1290 -endobj  
1291 -  
1292 -78 0 obj  
1293 -<<  
1294 ->> 2178 +132 0 obj
  2179 +58
1295 endobj 2180 endobj
1296 2181
1297 -79 0 obj 2182 +133 0 obj
1298 << 2183 <<
1299 - /A 83 0 R  
1300 - /P 21 0 R 2184 + /A 137 0 R
  2185 + /P 27 0 R
1301 /Pg 3 0 R 2186 /Pg 3 0 R
1302 /S /Standard 2187 /S /Standard
1303 /Type /StructElem 2188 /Type /StructElem
1304 >> 2189 >>
1305 endobj 2190 endobj
1306 2191
1307 -80 0 obj 2192 +134 0 obj
1308 << 2193 <<
1309 /K [ 2194 /K [
1310 0 2195 0
1311 ] 2196 ]
1312 - /P 21 0 R 2197 + /P 27 0 R
1313 /Pg 3 0 R 2198 /Pg 3 0 R
1314 /S /Form 2199 /S /Form
1315 /Type /StructElem 2200 /Type /StructElem
1316 >> 2201 >>
1317 endobj 2202 endobj
1318 2203
1319 -81 0 obj 2204 +135 0 obj
1320 << 2205 <<
1321 /K [ 2206 /K [
1322 1 2207 1
1323 ] 2208 ]
1324 - /P 21 0 R 2209 + /P 27 0 R
1325 /Pg 3 0 R 2210 /Pg 3 0 R
1326 /S /Form 2211 /S /Form
1327 /Type /StructElem 2212 /Type /StructElem
1328 >> 2213 >>
1329 endobj 2214 endobj
1330 2215
1331 -82 0 obj 2216 +136 0 obj
1332 << 2217 <<
1333 /K [ 2218 /K [
1334 2 2219 2
1335 ] 2220 ]
1336 - /P 21 0 R 2221 + /P 27 0 R
1337 /Pg 3 0 R 2222 /Pg 3 0 R
1338 /S /Form 2223 /S /Form
1339 /Type /StructElem 2224 /Type /StructElem
1340 >> 2225 >>
1341 endobj 2226 endobj
1342 2227
1343 -83 0 obj 2228 +137 0 obj
1344 << 2229 <<
1345 /O /Layout 2230 /O /Layout
1346 /Placement /Block 2231 /Placement /Block
@@ -1348,98 +2233,152 @@ endobj @@ -1348,98 +2233,152 @@ endobj
1348 endobj 2233 endobj
1349 2234
1350 xref 2235 xref
1351 -0 84 2236 +0 138
1352 0000000000 65535 f 2237 0000000000 65535 f
1353 0000000025 00000 n 2238 0000000025 00000 n
1354 0000000219 00000 n 2239 0000000219 00000 n
1355 0000000414 00000 n 2240 0000000414 00000 n
1356 -0000000731 00000 n  
1357 -0000000891 00000 n  
1358 -0000001063 00000 n  
1359 -0000001120 00000 n  
1360 -0000001161 00000 n  
1361 -0000001478 00000 n  
1362 -0000001521 00000 n  
1363 -0000002069 00000 n  
1364 -0000002090 00000 n  
1365 -0000002123 00000 n  
1366 -0000002466 00000 n  
1367 -0000002796 00000 n  
1368 -0000003139 00000 n  
1369 -0000003483 00000 n  
1370 -0000003826 00000 n  
1371 -0000004156 00000 n  
1372 -0000004500 00000 n  
1373 -0000004820 00000 n  
1374 -0000004956 00000 n  
1375 -0000005073 00000 n  
1376 -0000005132 00000 n  
1377 -0000005174 00000 n  
1378 -0000005493 00000 n  
1379 -0000005537 00000 n  
1380 -0000006081 00000 n  
1381 -0000006102 00000 n  
1382 -0000006148 00000 n  
1383 -0000006207 00000 n  
1384 -0000006249 00000 n  
1385 -0000006568 00000 n  
1386 -0000006612 00000 n  
1387 -0000007156 00000 n  
1388 -0000007177 00000 n  
1389 -0000007223 00000 n  
1390 -0000007282 00000 n  
1391 -0000007324 00000 n  
1392 -0000007643 00000 n  
1393 -0000007687 00000 n  
1394 -0000008236 00000 n  
1395 -0000008257 00000 n  
1396 -0000008303 00000 n  
1397 -0000008362 00000 n  
1398 -0000008404 00000 n  
1399 -0000008723 00000 n  
1400 -0000008767 00000 n  
1401 -0000009312 00000 n  
1402 -0000009333 00000 n  
1403 -0000009379 00000 n  
1404 -0000009438 00000 n  
1405 -0000009480 00000 n  
1406 -0000009799 00000 n  
1407 -0000009843 00000 n  
1408 -0000010392 00000 n  
1409 -0000010413 00000 n  
1410 -0000010459 00000 n  
1411 -0000010518 00000 n  
1412 -0000010560 00000 n  
1413 -0000010879 00000 n  
1414 -0000010923 00000 n  
1415 -0000011471 00000 n  
1416 -0000011492 00000 n  
1417 -0000011538 00000 n  
1418 -0000011597 00000 n  
1419 -0000011639 00000 n  
1420 -0000011958 00000 n  
1421 -0000012002 00000 n  
1422 -0000012546 00000 n  
1423 -0000012567 00000 n  
1424 -0000012613 00000 n  
1425 -0000012672 00000 n  
1426 -0000012714 00000 n  
1427 -0000013033 00000 n  
1428 -0000013077 00000 n  
1429 -0000013620 00000 n  
1430 -0000013641 00000 n  
1431 -0000013664 00000 n  
1432 -0000013758 00000 n  
1433 -0000013853 00000 n  
1434 -0000013948 00000 n  
1435 -0000014043 00000 n 2241 +0000000811 00000 n
  2242 +0000000971 00000 n
  2243 +0000001143 00000 n
  2244 +0000001200 00000 n
  2245 +0000001241 00000 n
  2246 +0000001558 00000 n
  2247 +0000001601 00000 n
  2248 +0000001865 00000 n
  2249 +0000001886 00000 n
  2250 +0000001909 00000 n
  2251 +0000002196 00000 n
  2252 +0000002216 00000 n
  2253 +0000002549 00000 n
  2254 +0000002570 00000 n
  2255 +0000002846 00000 n
  2256 +0000002876 00000 n
  2257 +0000003299 00000 n
  2258 +0000003709 00000 n
  2259 +0000004132 00000 n
  2260 +0000004556 00000 n
  2261 +0000004979 00000 n
  2262 +0000005393 00000 n
  2263 +0000005824 00000 n
  2264 +0000006231 00000 n
  2265 +0000006371 00000 n
  2266 +0000006491 00000 n
  2267 +0000006550 00000 n
  2268 +0000006592 00000 n
  2269 +0000006911 00000 n
  2270 +0000006955 00000 n
  2271 +0000007220 00000 n
  2272 +0000007241 00000 n
  2273 +0000007264 00000 n
  2274 +0000007546 00000 n
  2275 +0000007566 00000 n
  2276 +0000007899 00000 n
  2277 +0000007920 00000 n
  2278 +0000008196 00000 n
  2279 +0000008239 00000 n
  2280 +0000008298 00000 n
  2281 +0000008340 00000 n
  2282 +0000008659 00000 n
  2283 +0000008703 00000 n
  2284 +0000008967 00000 n
  2285 +0000008988 00000 n
  2286 +0000009011 00000 n
  2287 +0000009354 00000 n
  2288 +0000009374 00000 n
  2289 +0000009765 00000 n
  2290 +0000009786 00000 n
  2291 +0000010062 00000 n
  2292 +0000010105 00000 n
  2293 +0000010164 00000 n
  2294 +0000010206 00000 n
  2295 +0000010525 00000 n
  2296 +0000010569 00000 n
  2297 +0000010833 00000 n
  2298 +0000010854 00000 n
  2299 +0000010877 00000 n
  2300 +0000011225 00000 n
  2301 +0000011245 00000 n
  2302 +0000011636 00000 n
  2303 +0000011657 00000 n
  2304 +0000011933 00000 n
  2305 +0000011976 00000 n
  2306 +0000012035 00000 n
  2307 +0000012077 00000 n
  2308 +0000012396 00000 n
  2309 +0000012440 00000 n
  2310 +0000012706 00000 n
  2311 +0000012727 00000 n
  2312 +0000012750 00000 n
  2313 +0000013032 00000 n
  2314 +0000013052 00000 n
  2315 +0000013385 00000 n
  2316 +0000013406 00000 n
  2317 +0000013682 00000 n
  2318 +0000013725 00000 n
  2319 +0000013784 00000 n
  2320 +0000013826 00000 n
  2321 +0000014145 00000 n
  2322 +0000014189 00000 n
  2323 +0000014456 00000 n
  2324 +0000014477 00000 n
  2325 +0000014500 00000 n
  2326 +0000014843 00000 n
  2327 +0000014863 00000 n
  2328 +0000015259 00000 n
  2329 +0000015280 00000 n
  2330 +0000015556 00000 n
  2331 +0000015599 00000 n
  2332 +0000015658 00000 n
  2333 +0000015700 00000 n
  2334 +0000016019 00000 n
  2335 +0000016063 00000 n
  2336 +0000016327 00000 n
  2337 +0000016348 00000 n
  2338 +0000016372 00000 n
  2339 +0000016661 00000 n
  2340 +0000016682 00000 n
  2341 +0000017017 00000 n
  2342 +0000017039 00000 n
  2343 +0000017317 00000 n
  2344 +0000017361 00000 n
  2345 +0000017422 00000 n
  2346 +0000017465 00000 n
  2347 +0000017786 00000 n
  2348 +0000017831 00000 n
  2349 +0000018098 00000 n
  2350 +0000018120 00000 n
  2351 +0000018144 00000 n
  2352 +0000018428 00000 n
  2353 +0000018449 00000 n
  2354 +0000018784 00000 n
  2355 +0000018806 00000 n
  2356 +0000019084 00000 n
  2357 +0000019128 00000 n
  2358 +0000019189 00000 n
  2359 +0000019232 00000 n
  2360 +0000019553 00000 n
  2361 +0000019598 00000 n
  2362 +0000019864 00000 n
  2363 +0000019886 00000 n
  2364 +0000019910 00000 n
  2365 +0000020194 00000 n
  2366 +0000020215 00000 n
  2367 +0000020550 00000 n
  2368 +0000020572 00000 n
  2369 +0000020850 00000 n
  2370 +0000020871 00000 n
  2371 +0000020967 00000 n
  2372 +0000021063 00000 n
  2373 +0000021159 00000 n
  2374 +0000021255 00000 n
1436 trailer << 2375 trailer <<
1437 /DocChecksum /DA785F789D02970D387C264D0A6C8CB0 2376 /DocChecksum /DA785F789D02970D387C264D0A6C8CB0
1438 /Info 2 0 R 2377 /Info 2 0 R
1439 /Root 1 0 R 2378 /Root 1 0 R
1440 - /Size 84 2379 + /Size 138
1441 /ID [<976442cb303b8d5e88a36a127de2a19f><31415926535897932384626433832795>] 2380 /ID [<976442cb303b8d5e88a36a127de2a19f><31415926535897932384626433832795>]
1442 >> 2381 >>
1443 startxref 2382 startxref
1444 -14099 2383 +21312
1445 %%EOF 2384 %%EOF
qpdf/qtest/qpdf/manual-appearances.pdf
@@ -956,12 +956,19 @@ q @@ -956,12 +956,19 @@ q
956 0 0 103.45 53 re s 956 0 0 103.45 53 re s
957 0 0 1 RG 957 0 0 1 RG
958 5 5 15 15 re s 958 5 5 15 15 re s
  959 +1 w
  960 +1 0 0 RG
  961 +-10 25 m
  962 +113.45 25 l
  963 +52 -10 m
  964 +52 63 l
  965 +s
959 Q 966 Q
960 endstream 967 endstream
961 endobj 968 endobj
962 969
963 38 0 obj 970 38 0 obj
964 -60 971 +113
965 endobj 972 endobj
966 973
967 %% Original object ID: 39 0 974 %% Original object ID: 39 0
@@ -1084,12 +1091,19 @@ q @@ -1084,12 +1091,19 @@ q
1084 0 0 103.45 53 re s 1091 0 0 103.45 53 re s
1085 0 0 1 RG 1092 0 0 1 RG
1086 5 5 15 15 re s 1093 5 5 15 15 re s
  1094 +1 w
  1095 +1 0 0 RG
  1096 +-10 25 m
  1097 +113.45 25 l
  1098 +52 -10 m
  1099 +52 63 l
  1100 +s
1087 Q 1101 Q
1088 endstream 1102 endstream
1089 endobj 1103 endobj
1090 1104
1091 46 0 obj 1105 46 0 obj
1092 -60 1106 +113
1093 endobj 1107 endobj
1094 1108
1095 %% Original object ID: 47 0 1109 %% Original object ID: 47 0
@@ -1227,12 +1241,19 @@ q @@ -1227,12 +1241,19 @@ q
1227 0 0 103.45 53 re s 1241 0 0 103.45 53 re s
1228 0 0 1 RG 1242 0 0 1 RG
1229 5 5 15 15 re s 1243 5 5 15 15 re s
  1244 +1 w
  1245 +1 0 0 RG
  1246 +-10 25 m
  1247 +113.45 25 l
  1248 +52 -10 m
  1249 +52 63 l
  1250 +s
1230 Q 1251 Q
1231 endstream 1252 endstream
1232 endobj 1253 endobj
1233 1254
1234 54 0 obj 1255 54 0 obj
1235 -60 1256 +113
1236 endobj 1257 endobj
1237 1258
1238 %% Original object ID: 55 0 1259 %% Original object ID: 55 0
@@ -1372,12 +1393,19 @@ q @@ -1372,12 +1393,19 @@ q
1372 0 0 103.45 53 re s 1393 0 0 103.45 53 re s
1373 0 0 1 RG 1394 0 0 1 RG
1374 5 5 15 15 re s 1395 5 5 15 15 re s
  1396 +1 w
  1397 +1 0 0 RG
  1398 +-10 25 m
  1399 +113.45 25 l
  1400 +52 -10 m
  1401 +52 63 l
  1402 +s
1375 Q 1403 Q
1376 endstream 1404 endstream
1377 endobj 1405 endobj
1378 1406
1379 62 0 obj 1407 62 0 obj
1380 -60 1408 +113
1381 endobj 1409 endobj
1382 1410
1383 %% Original object ID: 63 0 1411 %% Original object ID: 63 0
@@ -1500,12 +1528,19 @@ q @@ -1500,12 +1528,19 @@ q
1500 0 0 103.45 53 re s 1528 0 0 103.45 53 re s
1501 0 0 1 RG 1529 0 0 1 RG
1502 5 5 15 15 re s 1530 5 5 15 15 re s
  1531 +1 w
  1532 +1 0 0 RG
  1533 +-10 25 m
  1534 +113.45 25 l
  1535 +52 -10 m
  1536 +52 63 l
  1537 +s
1503 Q 1538 Q
1504 endstream 1539 endstream
1505 endobj 1540 endobj
1506 1541
1507 70 0 obj 1542 70 0 obj
1508 -60 1543 +113
1509 endobj 1544 endobj
1510 1545
1511 %% Original object ID: 71 0 1546 %% Original object ID: 71 0
@@ -1644,12 +1679,19 @@ q @@ -1644,12 +1679,19 @@ q
1644 0 0 103.45 53 re s 1679 0 0 103.45 53 re s
1645 0 0 1 RG 1680 0 0 1 RG
1646 5 5 15 15 re s 1681 5 5 15 15 re s
  1682 +1 w
  1683 +1 0 0 RG
  1684 +-10 25 m
  1685 +113.45 25 l
  1686 +52 -10 m
  1687 +52 63 l
  1688 +s
1647 Q 1689 Q
1648 endstream 1690 endstream
1649 endobj 1691 endobj
1650 1692
1651 78 0 obj 1693 78 0 obj
1652 -60 1694 +113
1653 endobj 1695 endobj
1654 1696
1655 %% Original object ID: 79 0 1697 %% Original object ID: 79 0
@@ -1772,12 +1814,19 @@ q @@ -1772,12 +1814,19 @@ q
1772 0 0 103.45 53 re s 1814 0 0 103.45 53 re s
1773 0 0 1 RG 1815 0 0 1 RG
1774 5 5 15 15 re s 1816 5 5 15 15 re s
  1817 +1 w
  1818 +1 0 0 RG
  1819 +-10 25 m
  1820 +113.45 25 l
  1821 +52 -10 m
  1822 +52 63 l
  1823 +s
1775 Q 1824 Q
1776 endstream 1825 endstream
1777 endobj 1826 endobj
1778 1827
1779 86 0 obj 1828 86 0 obj
1780 -60 1829 +113
1781 endobj 1830 endobj
1782 1831
1783 %% Original object ID: 87 0 1832 %% Original object ID: 87 0
@@ -1900,12 +1949,19 @@ q @@ -1900,12 +1949,19 @@ q
1900 0 0 103.45 53 re s 1949 0 0 103.45 53 re s
1901 0 0 1 RG 1950 0 0 1 RG
1902 5 5 15 15 re s 1951 5 5 15 15 re s
  1952 +1 w
  1953 +1 0 0 RG
  1954 +-10 25 m
  1955 +113.45 25 l
  1956 +52 -10 m
  1957 +52 63 l
  1958 +s
1903 Q 1959 Q
1904 endstream 1960 endstream
1905 endobj 1961 endobj
1906 1962
1907 94 0 obj 1963 94 0 obj
1908 -60 1964 +113
1909 endobj 1965 endobj
1910 1966
1911 %% Original object ID: 95 0 1967 %% Original object ID: 95 0
@@ -2027,12 +2083,19 @@ q @@ -2027,12 +2083,19 @@ q
2027 0 0 103.45 53 re s 2083 0 0 103.45 53 re s
2028 0 0 1 RG 2084 0 0 1 RG
2029 5 5 15 15 re s 2085 5 5 15 15 re s
  2086 +1 w
  2087 +1 0 0 RG
  2088 +-10 25 m
  2089 +113.45 25 l
  2090 +52 -10 m
  2091 +52 63 l
  2092 +s
2030 Q 2093 Q
2031 endstream 2094 endstream
2032 endobj 2095 endobj
2033 2096
2034 102 0 obj 2097 102 0 obj
2035 -60 2098 +113
2036 endobj 2099 endobj
2037 2100
2038 %% Original object ID: 103 0 2101 %% Original object ID: 103 0
@@ -2568,106 +2631,106 @@ xref @@ -2568,106 +2631,106 @@ xref
2568 0000010828 00000 n 2631 0000010828 00000 n
2569 0000011049 00000 n 2632 0000011049 00000 n
2570 0000011097 00000 n 2633 0000011097 00000 n
2571 -0000011311 00000 n  
2572 -0000011359 00000 n  
2573 -0000011569 00000 n  
2574 -0000011617 00000 n  
2575 -0000011835 00000 n  
2576 -0000011883 00000 n  
2577 -0000011944 00000 n  
2578 -0000012321 00000 n  
2579 -0000012537 00000 n  
2580 -0000012585 00000 n  
2581 -0000012797 00000 n  
2582 -0000012845 00000 n  
2583 -0000013124 00000 n  
2584 -0000013172 00000 n  
2585 -0000013233 00000 n  
2586 -0000013600 00000 n  
2587 -0000013874 00000 n  
2588 -0000013922 00000 n  
2589 -0000014134 00000 n  
2590 -0000014182 00000 n  
2591 -0000014466 00000 n  
2592 -0000014514 00000 n  
2593 -0000014575 00000 n  
2594 -0000014955 00000 n  
2595 -0000015229 00000 n  
2596 -0000015277 00000 n  
2597 -0000015489 00000 n  
2598 -0000015537 00000 n  
2599 -0000015755 00000 n  
2600 -0000015803 00000 n  
2601 -0000015864 00000 n  
2602 -0000016245 00000 n 2634 +0000011364 00000 n
  2635 +0000011413 00000 n
  2636 +0000011623 00000 n
  2637 +0000011671 00000 n
  2638 +0000011889 00000 n
  2639 +0000011937 00000 n
  2640 +0000011998 00000 n
  2641 +0000012375 00000 n
  2642 +0000012644 00000 n
  2643 +0000012693 00000 n
  2644 +0000012905 00000 n
  2645 +0000012953 00000 n
  2646 +0000013232 00000 n
  2647 +0000013280 00000 n
  2648 +0000013341 00000 n
  2649 +0000013708 00000 n
  2650 +0000014035 00000 n
  2651 +0000014084 00000 n
  2652 +0000014296 00000 n
  2653 +0000014344 00000 n
  2654 +0000014628 00000 n
  2655 +0000014676 00000 n
  2656 +0000014737 00000 n
  2657 +0000015117 00000 n
  2658 +0000015444 00000 n
  2659 +0000015493 00000 n
  2660 +0000015705 00000 n
  2661 +0000015753 00000 n
  2662 +0000015971 00000 n
  2663 +0000016019 00000 n
  2664 +0000016080 00000 n
2603 0000016461 00000 n 2665 0000016461 00000 n
2604 -0000016509 00000 n  
2605 -0000016721 00000 n  
2606 -0000016769 00000 n  
2607 -0000017048 00000 n  
2608 -0000017096 00000 n  
2609 -0000017157 00000 n  
2610 -0000017537 00000 n  
2611 -0000017816 00000 n  
2612 -0000017864 00000 n  
2613 -0000018076 00000 n  
2614 -0000018124 00000 n  
2615 -0000018347 00000 n  
2616 -0000018395 00000 n  
2617 -0000018456 00000 n  
2618 -0000018823 00000 n  
2619 -0000019039 00000 n  
2620 -0000019087 00000 n  
2621 -0000019299 00000 n  
2622 -0000019347 00000 n  
2623 -0000019565 00000 n  
2624 -0000019613 00000 n  
2625 -0000019674 00000 n  
2626 -0000020055 00000 n  
2627 -0000020271 00000 n  
2628 -0000020319 00000 n  
2629 -0000020531 00000 n  
2630 -0000020579 00000 n  
2631 -0000020797 00000 n  
2632 -0000020845 00000 n  
2633 -0000020907 00000 n  
2634 -0000021276 00000 n  
2635 -0000021494 00000 n  
2636 -0000021544 00000 n  
2637 -0000021758 00000 n  
2638 -0000021831 00000 n  
2639 -0000022152 00000 n  
2640 -0000022203 00000 n  
2641 -0000022375 00000 n  
2642 -0000022502 00000 n  
2643 -0000022629 00000 n  
2644 -0000022950 00000 n  
2645 -0000023001 00000 n  
2646 -0000023128 00000 n  
2647 -0000023449 00000 n  
2648 -0000023500 00000 n  
2649 -0000023627 00000 n  
2650 -0000023948 00000 n  
2651 -0000023999 00000 n  
2652 -0000024126 00000 n  
2653 -0000024447 00000 n  
2654 -0000024498 00000 n  
2655 -0000024625 00000 n  
2656 -0000024946 00000 n  
2657 -0000024997 00000 n  
2658 -0000025124 00000 n  
2659 -0000025445 00000 n  
2660 -0000025496 00000 n  
2661 -0000025623 00000 n  
2662 -0000025944 00000 n  
2663 -0000025995 00000 n  
2664 -0000026122 00000 n  
2665 -0000026443 00000 n  
2666 -0000026494 00000 n  
2667 -0000026621 00000 n  
2668 -0000026748 00000 n  
2669 -0000026875 00000 n  
2670 -0000027002 00000 n 2666 +0000016730 00000 n
  2667 +0000016779 00000 n
  2668 +0000016991 00000 n
  2669 +0000017039 00000 n
  2670 +0000017318 00000 n
  2671 +0000017366 00000 n
  2672 +0000017427 00000 n
  2673 +0000017807 00000 n
  2674 +0000018139 00000 n
  2675 +0000018188 00000 n
  2676 +0000018400 00000 n
  2677 +0000018448 00000 n
  2678 +0000018671 00000 n
  2679 +0000018719 00000 n
  2680 +0000018780 00000 n
  2681 +0000019147 00000 n
  2682 +0000019416 00000 n
  2683 +0000019465 00000 n
  2684 +0000019677 00000 n
  2685 +0000019725 00000 n
  2686 +0000019943 00000 n
  2687 +0000019991 00000 n
  2688 +0000020052 00000 n
  2689 +0000020433 00000 n
  2690 +0000020702 00000 n
  2691 +0000020751 00000 n
  2692 +0000020963 00000 n
  2693 +0000021011 00000 n
  2694 +0000021229 00000 n
  2695 +0000021277 00000 n
  2696 +0000021339 00000 n
  2697 +0000021708 00000 n
  2698 +0000021979 00000 n
  2699 +0000022030 00000 n
  2700 +0000022244 00000 n
  2701 +0000022317 00000 n
  2702 +0000022638 00000 n
  2703 +0000022689 00000 n
  2704 +0000022861 00000 n
  2705 +0000022988 00000 n
  2706 +0000023115 00000 n
  2707 +0000023436 00000 n
  2708 +0000023487 00000 n
  2709 +0000023614 00000 n
  2710 +0000023935 00000 n
  2711 +0000023986 00000 n
  2712 +0000024113 00000 n
  2713 +0000024434 00000 n
  2714 +0000024485 00000 n
  2715 +0000024612 00000 n
  2716 +0000024933 00000 n
  2717 +0000024984 00000 n
  2718 +0000025111 00000 n
  2719 +0000025432 00000 n
  2720 +0000025483 00000 n
  2721 +0000025610 00000 n
  2722 +0000025931 00000 n
  2723 +0000025982 00000 n
  2724 +0000026109 00000 n
  2725 +0000026430 00000 n
  2726 +0000026481 00000 n
  2727 +0000026608 00000 n
  2728 +0000026929 00000 n
  2729 +0000026980 00000 n
  2730 +0000027107 00000 n
  2731 +0000027234 00000 n
  2732 +0000027361 00000 n
  2733 +0000027488 00000 n
2671 trailer << 2734 trailer <<
2672 /DocChecksum /DA785F789D02970D387C264D0A6C8CB0 2735 /DocChecksum /DA785F789D02970D387C264D0A6C8CB0
2673 /Info 2 0 R 2736 /Info 2 0 R
@@ -2676,5 +2739,5 @@ trailer &lt;&lt; @@ -2676,5 +2739,5 @@ trailer &lt;&lt;
2676 /ID [<976442cb303b8d5e88a36a127de2a19f><1f7f023bcea1641cee1f72048a9d0676>] 2739 /ID [<976442cb303b8d5e88a36a127de2a19f><1f7f023bcea1641cee1f72048a9d0676>]
2677 >> 2740 >>
2678 startxref 2741 startxref
2679 -27059 2742 +27545
2680 %%EOF 2743 %%EOF
qpdf/qtest/qpdf/merge-dict.out
@@ -6,11 +6,9 @@ @@ -6,11 +6,9 @@
6 "/b": "conflict: seen", 6 "/b": "conflict: seen",
7 "/c": [ 7 "/c": [
8 2, 8 2,
9 - 3,  
10 - 1 9 + 3
11 ], 10 ],
12 "/d": { 11 "/d": {
13 - "/x": 24,  
14 "/y": 25, 12 "/y": 25,
15 "/z": 26 13 "/z": 26
16 }, 14 },
@@ -33,4 +31,14 @@ @@ -33,4 +31,14 @@
33 "two" 31 "two"
34 ] 32 ]
35 } 33 }
  34 +/A
  35 +/B
  36 +/C
  37 +/a
  38 +/b
  39 +/c
  40 +/d
  41 +/e
  42 +/indirect2
  43 +/recursive
36 test 50 done 44 test 50 done
qpdf/qtest/qpdf/need-appearances-out.pdf
No preview for this file type
qpdf/test_driver.cc
@@ -1760,10 +1760,16 @@ void runtest(int n, char const* filename1, char const* arg2) @@ -1760,10 +1760,16 @@ void runtest(int n, char const* filename1, char const* arg2)
1760 // merge-dict.pdf 1760 // merge-dict.pdf
1761 QPDFObjectHandle d1 = pdf.getTrailer().getKey("/Dict1"); 1761 QPDFObjectHandle d1 = pdf.getTrailer().getKey("/Dict1");
1762 QPDFObjectHandle d2 = pdf.getTrailer().getKey("/Dict2"); 1762 QPDFObjectHandle d2 = pdf.getTrailer().getKey("/Dict2");
1763 - d1.mergeDictionary(d2); 1763 + d1.mergeResources(d2);
1764 std::cout << d1.getJSON().unparse() << std::endl; 1764 std::cout << d1.getJSON().unparse() << std::endl;
1765 // Top-level type mismatch 1765 // Top-level type mismatch
1766 - d1.mergeDictionary(d2.getKey("/k1")); 1766 + d1.mergeResources(d2.getKey("/k1"));
  1767 + std::set<std::string> names = d1.getResourceNames();
  1768 + for (std::set<std::string>::iterator iter = names.begin();
  1769 + iter != names.end(); ++iter)
  1770 + {
  1771 + std::cout << *iter << std::endl;
  1772 + }
1767 } 1773 }
1768 else 1774 else
1769 { 1775 {